Module: Monarchy::ActsAsUser::InstanceMethods

Defined in:
lib/monarchy/acts_as_user.rb

Instance Method Summary collapse

Instance Method Details

#grant(role_name, resource) ⇒ Object



25
26
27
28
29
30
# File 'lib/monarchy/acts_as_user.rb', line 25

def grant(role_name, resource)
  ActiveRecord::Base.transaction do
    Monarchy::Member.create(build_members(resource.hierarchy.memberless_ancestors_for(self)))
    grant_or_create_member(role_name, resource)
  end
end

#member_for(resource) ⇒ Object



32
33
34
# File 'lib/monarchy/acts_as_user.rb', line 32

def member_for(resource)
  resource.hierarchy.members.where("monarchy_members.user_id": id).first
end

#revoke_access(resource) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/monarchy/acts_as_user.rb', line 36

def revoke_access(resource)
  self_and_descendant_ids = resource.hierarchy.self_and_descendant_ids

  ActiveRecord::Base.transaction do
    members_roles_for(self_and_descendant_ids).destroy_all
    try_revoke_ancestors_for(resource)
  end
end

#revoke_role(role_name, resource) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'lib/monarchy/acts_as_user.rb', line 45

def revoke_role(role_name, resource)
  members_roles = member_for(resource).members_roles

  if only_this_role(members_roles, role_name)
    revoke_access(resource)
  else
    members_roles.joins(:role).where("monarchy_roles.name": role_name).destroy_all
  end
end

#role_for(resource) ⇒ Object



15
16
17
18
19
20
21
22
23
# File 'lib/monarchy/acts_as_user.rb', line 15

def role_for(resource)
  ancestors_ids = resource.hierarchy.self_and_ancestors_ids
  Monarchy::Role.joins(:members)
                .where("((monarchy_roles.inherited = 't' "\
                 "AND monarchy_members.hierarchy_id IN (#{ancestors_ids.join(',')})) "\
                 "OR (monarchy_members.hierarchy_id = #{resource.hierarchy.id})) "\
                 "AND monarchy_members.user_id = #{id}")
                .order(level: :desc).first
end