编辑:为 CanCanCan 修订
从 CanCanCan 的 1.12 版(CanCan 的社区延续)开始,Ability.new(user).permissions 返回具有给定用户所有权限的哈希值。
上一个答案(CanCan):
这可能有点复杂......但它就是这样......
如果您将指定的用户传递给 CanCan 所需的能力模型,则可以使用 instance_variable_get 访问该用户角色的定义,然后将其分解为您想要的任何字符串值。..
>> u=User.new(:role=>"admin")
>> a=Ability.new(u)
>> a.instance_variable_get("@rules").collect{
|rule| rule.instance_variable_get("@actions").to_s
}
=> ["read", "manage", "update"]
如果您想知道施加这些规则的模型,您可以访问 @subjects 实例变量以获取其名称。
这是我使用的能力模型布局 (pp)
Ability:0x5b41dba @rules=[
#<CanCan::Rule:0xc114739
@actions=[:read],
@base_behavior=true,
@conditions={},
@match_all=false,
@block=nil,
@subjects=[
User(role: string)]>,
#<CanCan::Rule:0x7ec40b92
@actions=[:manage],
@base_behavior=true,
@conditions={},
@match_all=false,
@block=nil,
@subjects=[
Encounter(id: integer)]>,
#<CanCan::Rule:0x55bf110c
@actions=[:update],
@base_behavior=true,
@conditions={:id=>4},
@match_all=false,
@block=nil,
@subjects=[
User(role: string)]>
]