Module: Dancan

Extended by:
ActiveSupport::Concern
Defined in:
lib/dancan.rb,
lib/dancan/version.rb,
lib/dancan/policy_finder.rb

Defined Under Namespace

Classes: AuthorizationNotPerformedError, NotAuthorizedError, NotDefinedError, PolicyFinder, PolicyScopingNotPerformedError

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.policy(user, record) ⇒ Object



21
22
23
24
# File 'lib/dancan.rb', line 21

def policy(user, record)
  policy = PolicyFinder.new(record).policy
  policy.new(user, record) if policy
end

.policy!(user, record) ⇒ Object



26
27
28
# File 'lib/dancan.rb', line 26

def policy!(user, record)
  PolicyFinder.new(record).policy!.new(user, record)
end

Instance Method Details

#dancan_adminObject



67
68
69
# File 'lib/dancan.rb', line 67

def dancan_admin
  current_admin
end

#policiesObject



63
64
65
# File 'lib/dancan.rb', line 63

def policies
  @_dancan_policies ||= {}
end

#policy(record) ⇒ Object



59
60
61
# File 'lib/dancan.rb', line 59

def policy(record)
  policies[record] ||= Dancan.policy!(dancan_admin, record)
end

#restrict_access(record, permitted_roles = nil) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/dancan.rb', line 44

def restrict_access(record, permitted_roles=nil)
  
  
  roles = permitted_roles
  policy = policy(record)
  unless roles.map().any? { |role| policy.public_send(role) }
    error = NotAuthorizedError.new("#{record} does not have not roles: #{roles.to_s}")
    error.roles, error.record, error.policy = roles.to_s, record, policy

    raise error
  end

  true
end