Module: SkillTree::Subject::InstanceMethods

Defined in:
lib/skill_tree/subject.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



9
10
11
12
13
14
# File 'lib/skill_tree/subject.rb', line 9

def self.included(base)
  base.send :has_many, :user_roles,
            class_name: 'SkillTree::Models::UserRole'
  base.send :has_many, :roles,
            through: :user_roles, class_name: 'SkillTree::Models::Role'
end

Instance Method Details

#can?(action, resource) ⇒ Boolean Also known as: allowed_to?

Returns:

  • (Boolean)


16
17
18
19
# File 'lib/skill_tree/subject.rb', line 16

def can?(action, resource)
  resource.default_permission?(action) ||
    permitted_with_role?(action, resource)
end

#role!(role, resource) ⇒ Object



28
29
30
31
32
# File 'lib/skill_tree/subject.rb', line 28

def role!(role, resource)
  role = SkillTree::Models::Role.find_by_name!(role)
  user_role = user_roles.find_or_initialize_by(resource: resource)
  user_role.update!(role: role)
end

#role?(role_name, resource) ⇒ Boolean Also known as: has_role?

Returns:

  • (Boolean)


22
23
24
25
26
# File 'lib/skill_tree/subject.rb', line 22

def role?(role_name, resource)
  user_roles.joins(:role)
    .where(roles: { name: role_name.to_s })
    .where(resource: resource).any?
end

#unrole!(role, resource) ⇒ Object



34
35
36
37
38
# File 'lib/skill_tree/subject.rb', line 34

def unrole!(role, resource)
  role = SkillTree::Models::Role.find_by_name!(role)
  active_roles = user_roles.where(role: role, resource: resource)
  active_roles.destroy_all
end