Module: DoRole::PermissionManageable

Extended by:
ActiveSupport::Concern
Included in:
Role
Defined in:
lib/do_role/concerns/permission_manageable.rb

Instance Method Summary collapse

Instance Method Details

#add_permission(permission) ⇒ Object

添加权限



22
23
24
25
# File 'lib/do_role/concerns/permission_manageable.rb', line 22

def add_permission(permission)
  validate_permission!(permission)
  modify_permission(permission, :add)
end

#all_permissionsObject

获取所有权限



34
35
36
# File 'lib/do_role/concerns/permission_manageable.rb', line 34

def all_permissions
  cached_permissions
end

#cached_permissionsObject

带缓存的权限



52
53
54
55
56
57
58
59
60
61
# File 'lib/do_role/concerns/permission_manageable.rb', line 52

def cached_permissions
  @cached_permissions ||= begin
    all_permissions = permissions.deep_dup
    if parent_role
      parent_permissions = parent_role.cached_permissions
      all_permissions.deep_merge!(parent_permissions) { |_, old_val, new_val| Array.wrap(old_val) | Array.wrap(new_val) }
    end
    all_permissions
  end
end

#computed_permissionsObject

计算完整权限路径



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/do_role/concerns/permission_manageable.rb', line 39

def computed_permissions
  all_permissions.flat_map do |namespace, actions|
    if actions.is_a?(Hash)
      actions.flat_map do |sub_namespace, sub_actions|
        Array.wrap(sub_actions).map { |action| "#{namespace}.#{sub_namespace}.#{action}" }
      end
    else
      Array.wrap(actions).map { |action| "#{namespace}.#{action}" }
    end
  end
end

#has_permission?(permission) ⇒ Boolean

检查是否拥有某个权限

Returns:

  • (Boolean)


15
16
17
18
19
# File 'lib/do_role/concerns/permission_manageable.rb', line 15

def has_permission?(permission)
  return false if permission.blank?
  namespace, action = parse_permission(permission)
  cached_permissions.dig(namespace)&.include?(action)
end

#remove_permission(permission) ⇒ Object

移除权限



28
29
30
31
# File 'lib/do_role/concerns/permission_manageable.rb', line 28

def remove_permission(permission)
  return if permission.blank?
  modify_permission(permission, :remove)
end