0

我在玩 Mongoid(NoMySQL 数据库)、DEVISE 和 CANACN

我已阅读手册(https://github.com/ryanb/cancan/wiki/Role-Based-Authorization),但我不想使用“roleMask”计算。我想使用 Array (或 Hash) -field 来代替,其中包含用户的角色。

class User
  include Mongoid::Document
  field :email, :type => String, :null => false
  field :roles, :type => Array, default: -> { ['User'] if new_record?}

这有可能吗?如果是,如何?:-)

提前谢谢了

4

1 回答 1

3

Cancan 并不真正关心你的角色是如何工作的——你的能力文件是纯红宝石,所以逻辑完全取决于你。例如,您可能有以下能力:

can :manage, Product

如果您想将此限制为角色数组包含某个值的用户,那么您可以这样做

if user.roles.include?('Admin')
  can :manage, Product
end

由于你的能力只是一个 ruby​​ 类,你几乎可以做任何你可以用 ruby​​ 表达的事情。

有多种处理继承的方法,cancan wiki中概述了两种。

一种方法涉及更改您检查角色的方式:如果您有一个admin?方法,那么不仅检查管理员角色的存在,它还将检查应该继承所有该访问权限的任何其他角色的存在。

另一种方法是将您的能力文件拆分为以角色命名的方法,例如编辑角色的所有语句都在editor方法中,该manager方法包含经理角色的所有语句等。例如,如果经理需要继承访问编辑器然后调用editor方法 from manager

于 2012-05-30T08:46:35.307 回答