我正在玩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?}
这有可能吗?什么时候,如何? : - )
非常感谢提前
答案 0 :(得分:3)
Cancan并不关心你的角色是如何运作的 - 你的能力文件是纯粹的红宝石所以逻辑完全取决于你。例如,你可能有这个能力:
can :manage, Product
如果要将此限制为其角色数组包含特定值的用户,则可以执行
if user.roles.include?('Admin')
can :manage, Product
end
由于你的能力只是一个红宝石课,你可以做任何你可以用红宝石表达的东西。
有多种处理继承的方法,cancan wiki中列出了两种方法。
一种方法涉及更改检查角色的方式:如果您使用admin?
方法,那么它不仅会检查是否存在管理员角色,还会检查是否存在任何其他角色继承所有访问权限。
另一种方法是将您的能力文件拆分为以角色命名的方法,例如编辑器角色的所有语句都在editor
方法中,manager
方法包含所有语句管理员角色等。例如,如果管理员需要继承编辑器的访问权限,则从editor
调用manager
方法。