編集: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インスタンス変数にアクセスしてその名前を取得できます。
これが私が使ったAbilityのモデルレイアウトです(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)]>
]