Module: ActsAsRoleRestricted::ClassMethods
- Defined in:
- app/models/concerns/acts_as_role_restricted.rb
Instance Method Summary collapse
- #acts_as_role_restricted? ⇒ Boolean
-
#for_role(*roles) ⇒ Object
Returns all records which have been assigned any of the given roles, as well as any record with no role assigned.
-
#with_role(*roles) ⇒ Object
Returns all records which have been assigned any of the the given roles.
- #with_role_sql(*roles) ⇒ Object
- #without_role(*roles) ⇒ Object
Instance Method Details
#acts_as_role_restricted? ⇒ Boolean
56 |
# File 'app/models/concerns/acts_as_role_restricted.rb', line 56 def acts_as_role_restricted?; true; end |
#for_role(*roles) ⇒ Object
Returns all records which have been assigned any of the given roles, as well as any record with no role assigned
66 67 68 69 70 71 |
# File 'app/models/concerns/acts_as_role_restricted.rb', line 66 def for_role(*roles) sql = with_role_sql(roles) || '' sql += ' OR ' if sql.present? sql += "(#{self.table_name}.roles_mask = 0) OR (#{self.table_name}.roles_mask IS NULL)" where(sql) end |
#with_role(*roles) ⇒ Object
Returns all records which have been assigned any of the the given roles
61 62 63 |
# File 'app/models/concerns/acts_as_role_restricted.rb', line 61 def with_role(*roles) where(with_role_sql(roles)) end |
#with_role_sql(*roles) ⇒ Object
73 74 75 76 77 78 79 |
# File 'app/models/concerns/acts_as_role_restricted.rb', line 73 def with_role_sql(*roles) roles = roles.flatten.compact roles = roles.first.roles if roles.length == 1 && roles.first.respond_to?(:roles) roles = (roles.map { |role| role.to_sym } & EffectiveRoles.roles) roles.map { |role| "(#{self.table_name}.roles_mask & %d > 0)" % 2**EffectiveRoles.roles.index(role) }.join(' OR ') end |
#without_role(*roles) ⇒ Object
81 82 83 84 85 86 87 88 89 |
# File 'app/models/concerns/acts_as_role_restricted.rb', line 81 def without_role(*roles) roles = roles.flatten.compact roles = roles.first.roles if roles.length == 1 && roles.first.respond_to?(:roles) roles = (roles.map { |role| role.to_sym } & EffectiveRoles.roles) where( roles.map { |role| "NOT(#{self.table_name}.roles_mask & %d > 0)" % 2**EffectiveRoles.roles.index(role) }.join(' AND ') ).or(where(roles_mask: nil)) end |