Module: Pundit

Extended by:
ActiveSupport::Concern
Defined in:
lib/pundit.rb,
lib/pundit/rspec.rb,
lib/pundit/version.rb,
lib/pundit/policy_finder.rb,
lib/generators/pundit/policy/policy_generator.rb,
lib/generators/pundit/install/install_generator.rb

Defined Under Namespace

Modules: Generators, Helper, RSpec Classes: AuthorizationNotPerformedError, Error, NotAuthorizedError, NotDefinedError, PolicyFinder, PolicyScopingNotPerformedError

Constant Summary collapse

SUFFIX =
"Policy"
VERSION =
"1.0.1"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.authorize(user, record, query) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/pundit.rb', line 37

def authorize(user, record, query)
  policy = policy!(user, record)

  unless policy.public_send(query)
    raise NotAuthorizedError.new(query: query, record: record, policy: policy)
  end

  true
end

.policy(user, record) ⇒ Object



56
57
58
59
# File 'lib/pundit.rb', line 56

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

.policy!(user, record) ⇒ Object



61
62
63
# File 'lib/pundit.rb', line 61

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

.policy_scope(user, scope) ⇒ Object



47
48
49
50
# File 'lib/pundit.rb', line 47

def policy_scope(user, scope)
  policy_scope = PolicyFinder.new(scope).scope
  policy_scope.new(user, scope).resolve if policy_scope
end

.policy_scope!(user, scope) ⇒ Object



52
53
54
# File 'lib/pundit.rb', line 52

def policy_scope!(user, scope)
  PolicyFinder.new(scope).scope!.new(user, scope).resolve
end

Instance Method Details

#authorize(record, query = nil) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/pundit.rb', line 110

def authorize(record, query=nil)
  query ||= params[:action].to_s + "?"

  @_pundit_policy_authorized = true

  policy = policy(record)
  unless policy.public_send(query)
    raise NotAuthorizedError.new(query: query, record: record, policy: policy)
  end

  true
end

#permitted_attributes(record) ⇒ Object



140
141
142
143
# File 'lib/pundit.rb', line 140

def permitted_attributes(record)
  name = record.class.to_s.demodulize.underscore
  params.require(name).permit(policy(record).permitted_attributes)
end

#policiesObject



145
146
147
# File 'lib/pundit.rb', line 145

def policies
  @_pundit_policies ||= {}
end

#policy(record) ⇒ Object



136
137
138
# File 'lib/pundit.rb', line 136

def policy(record)
  policies[record] ||= Pundit.policy!(pundit_user, record)
end

#policy_scope(scope) ⇒ Object



131
132
133
134
# File 'lib/pundit.rb', line 131

def policy_scope(scope)
  @_pundit_policy_scoped = true
  pundit_policy_scope(scope)
end

#policy_scopesObject



149
150
151
# File 'lib/pundit.rb', line 149

def policy_scopes
  @_pundit_policy_scopes ||= {}
end

#pundit_policy_authorized?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/pundit.rb', line 94

def pundit_policy_authorized?
  !!@_pundit_policy_authorized
end

#pundit_policy_scoped?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/pundit.rb', line 98

def pundit_policy_scoped?
  !!@_pundit_policy_scoped
end

#pundit_userObject



153
154
155
# File 'lib/pundit.rb', line 153

def pundit_user
  current_user
end

#skip_authorizationObject



123
124
125
# File 'lib/pundit.rb', line 123

def skip_authorization
  @_pundit_policy_authorized = true
end

#skip_policy_scopeObject



127
128
129
# File 'lib/pundit.rb', line 127

def skip_policy_scope
  @_pundit_policy_scoped = true
end

#verify_authorizedObject



102
103
104
# File 'lib/pundit.rb', line 102

def verify_authorized
  raise AuthorizationNotPerformedError unless pundit_policy_authorized?
end

#verify_policy_scopedObject



106
107
108
# File 'lib/pundit.rb', line 106

def verify_policy_scoped
  raise PolicyScopingNotPerformedError unless pundit_policy_scoped?
end