Sha256: 14307fa47bf4668f6e7a0a56d0dbe55df6f4514874fe514abe991c29c103aa26
Contents?: true
Size: 1.41 KB
Versions: 3
Compression:
Stored size: 1.41 KB
Contents
module AccessGranted module Policy attr_accessor :roles, :cache attr_reader :user def initialize(user, cache_enabled = true) @user = user @roles = [] @cache = {} configure end def configure end def role(name, conditions_or_klass = nil, conditions = nil, &block) name = name.to_sym if roles.select {|r| r.name == name }.any? raise DuplicateRole, "Role '#{name}' already defined" end r = if conditions_or_klass.is_a?(Class) && conditions_or_klass <= AccessGranted::Role conditions_or_klass.new(name, conditions, user, block) else Role.new(name, conditions_or_klass, user, block) end roles << r r end def can?(action, subject = nil) cache[action] ||= {} cache[action][subject] ||= check_permission(action, subject) end def check_permission(action, subject) applicable_roles.each do |role| permission = role.find_permission(action, subject) return permission.granted if permission end false end def cannot?(*args) !can?(*args) end def authorize!(action, subject) if cannot?(action, subject) raise AccessDenied end subject end private def applicable_roles @applicable_roles ||= roles.select do |role| role.applies_to?(user) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
access-granted-1.1.2 | lib/access-granted/policy.rb |
access-granted-1.1.1 | lib/access-granted/policy.rb |
access-granted-1.1.0 | lib/access-granted/policy.rb |