Class: DoRole::Ability

Inherits:
Object
  • Object
show all
Defined in:
lib/do_role/ability.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user) ⇒ Ability

Returns a new instance of Ability.



7
8
9
# File 'lib/do_role/ability.rb', line 7

def initialize(user)
  @user = user
end

Instance Attribute Details

#userObject (readonly)

Returns the value of attribute user.



5
6
7
# File 'lib/do_role/ability.rb', line 5

def user
  @user
end

Instance Method Details

#can?(action, subject, *extra_args) ⇒ Boolean

Returns:

  • (Boolean)


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/do_role/ability.rb', line 11

def can?(action, subject, *extra_args)
  conditions = extra_args.extract_options!
  permission_name = build_permission_name(action, subject)

  return false unless has_base_permission?(permission_name)

  permission = DoRole.permission_set.get(permission_name)
  if permission && permission[:requires].present?
    return false unless permission[:requires].all? { |req| can?(req, subject, conditions) }
  end

  # # 如果是对类进行检查且没有条件权限,则只检查基本权限
  # return false if subject.is_a?(Class) && permission[:conditions].present?
  # # 如果是对类进行检查且有条件权限,则返回false
  return true if subject.is_a?(Class) #&& permission[:conditions].empty?

  conditions_to_check = conditions
  if permission && !permission[:conditions].empty?
    conditions_to_check = permission[:conditions].merge(conditions)
  end

  check_conditions(subject, conditions_to_check)
end