Class: Role
- Inherits:
-
ApplicationRecord
- Object
- ApplicationRecord
- Role
- Defined in:
- app/models/role.rb
Overview
ACL role
Attributes:
biovision_component_id [BiovisionComponent]
data [jsonb]
slug [string]
user_count [integer]
uuid [uuid]
Constant Summary collapse
- CACHE_KEY =
'role_cache'
Class Method Summary collapse
Instance Method Summary collapse
- #add_to_cache!(user) ⇒ Object
- #add_user(user, options = { inclusive: true }) ⇒ Object
- #count_users! ⇒ Object
- #groups ⇒ Object
- #remove_from_cache!(user) ⇒ Object
- #remove_user(user) ⇒ Object
- #user_ids ⇒ Object
- #users ⇒ Object
Class Method Details
.[](slug) ⇒ Object
27 28 29 30 31 32 33 34 |
# File 'app/models/role.rb', line 27 def self.[](slug) parts = slug.to_s.split('.') criteria = { biovision_components: { slug: parts.shift }, slug: parts.join('.') } joins(:biovision_component).where(criteria).first end |
Instance Method Details
#add_to_cache!(user) ⇒ Object
61 62 63 64 65 66 67 |
# File 'app/models/role.rb', line 61 def add_to_cache!(user) return if user.nil? ids = user.role_ids + [id] user.data[CACHE_KEY] = ids.uniq user.save end |
#add_user(user, options = { inclusive: true }) ⇒ Object
80 81 82 83 84 85 |
# File 'app/models/role.rb', line 80 def add_user(user, = { inclusive: true }) inclusive = ![:inclusive].blank? user_roles.create(user: user, inclusive: inclusive) inclusive ? add_to_cache!(user) : remove_from_cache!(user) end |
#count_users! ⇒ Object
55 56 57 58 |
# File 'app/models/role.rb', line 55 def count_users! self.user_count = user_ids.count save end |
#groups ⇒ Object
36 37 38 39 40 |
# File 'app/models/role.rb', line 36 def groups # group_ids = role_groups.map(&:group).map(&:branch_ids).flatten.uniq # Group.where(id: group_ids) [] end |
#remove_from_cache!(user) ⇒ Object
70 71 72 73 74 75 76 |
# File 'app/models/role.rb', line 70 def remove_from_cache!(user) return if user.nil? new_ids = user.role_ids - [id] user.data[CACHE_KEY] = new_ids user.save end |
#remove_user(user) ⇒ Object
88 89 90 91 92 93 |
# File 'app/models/role.rb', line 88 def remove_user(user) return if user.nil? user_roles.where(user: user).destroy_all remove_from_cache!(user) end |
#user_ids ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'app/models/role.rb', line 46 def user_ids # direct_inclusive = user_roles.where(inclusive: true).pluck(:user_id).uniq # direct_exclusive = user_roles.where(inclusive: false).pluck(:user_id).uniq # group_inclusive = groups.map(&:user_ids).flatten # # group_inclusive + direct_inclusive - direct_exclusive [] end |
#users ⇒ Object
42 43 44 |
# File 'app/models/role.rb', line 42 def users User.where("data->'role_cache' @> '[?]'::jsonb", id) end |