如何简单快速的完成用户角色管理和权限控制(9)在 Ability.rb 中定义每种角色的权限
- UID
- 1066743
|
如何简单快速的完成用户角色管理和权限控制(9)在 Ability.rb 中定义每种角色的权限
在 Ability.rb 中定义每种角色的权限cancan+rolify 对权限的控制是基于角色的,且是针对资源的访问进行控制,具有相同角色的用户就有相同的权限,这带给我们非常大的便利。对于资源的访问权限,又分为许多种,基础的针对 RESTful method 有以下六种。
- :manage 指这个 controller內所有的 action
- :read 指这个controller内的 :index 和 :show
- :update 指这个controller内的 :edit 和 :update
- :destroy 指这个controller内的 :destroy
- :create 指这个controller内的 :new 和 :crate
- :all 指这个controller内所有的 object (resource)
其他非 RESTful 的 method(比如:search)也可以列上去,但是需要逐条列出来。
如果上面的基础权限无法满足你,你也可以使用 alias_action 来自定义权限组合。
假设要定义名为 :modify的权限组合,包含 :update和 :destroy,代码如下:
alias_action :update, :destroy, :to => :modify
对于每种角色的权限,是在 Ability.rb 中进行定义的,定义方法非常简单,在 can 后面传入访问权限和指定资源即可,代码如下所示。
清单12. 在 Ability.rb 中定义每种角色的权限
include CanCan::Ability
def initialize(user)
1
2
| user ||= User.new
# 如果用户角色是 admin ,给完整权限,可操作所有资源
|
if user.has_role? :admin
1
2
3
| can :manage, :all
# 如果用户角色是 author ,可以对 Paper 进行 read, edit, update 操作
elsif user.has_role? :author
|
can :read, Paper
can :update, Paper
1
| # 否则只能够对 Paper 进行 read 操作
|
else
can :read, Paper
end
end
end |
|
|
|
|
|