首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如何简单快速的完成用户角色管理和权限控制(9)在 Ability.rb 中定义每种角色的权限

如何简单快速的完成用户角色管理和权限控制(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 中定义每种角色的权限
1
class Ability




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
返回列表