РЕДАКТИРОВАТЬ: исправлено для CanCanCan
Начиная с версии 1.12 CanCanCan (продолжение сообщества 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)]>
]