В моем приложении пользователю разрешено назначать другого пользователя в качестве своего "менеджера по работе с клиентами", а менеджеру по работе с клиентами будет разрешено изменять всю информацию о пользователе.Я определил следующую способность:
can :manage, User do |user|
user == current_user or user.account_manager == current_user
end
У пользователя также есть некоторые вложенные ресурсы (например, публикации).Я определил следующую способность:
can :manage, Publication do |publication, user|
publication.user == current_user or user == current_user or user.account_manager == current_user
end
В просмотрах, которые я проверяю, используется следующее:
can? :update, @publication, @user_we_are_accessing
can? :create, Publication.new, @user_we_are_accessing
.
Пока все работает отлично.Моя проблема с контроллером.В свой PublicationsController я добавил:
load_and_authorize_resource :user
load_and_authorize_resource :publication, :through => :user
Однако это всегда выбрасывает AccessDenied, потому что проверка на публикацию не передает объект пользователя способности(попытка осмотреть объект пользователя в способности показывает ноль).
Любые идеи, как я могу реализовать это?
tl; dr: Использование CanCan для авторизации доступа к ресурсам.Пользователь может назначить другого пользователя в качестве менеджера аккаунта.Пользователь имеет вложенные ресурсы.Проблема: вложенный ресурс не доступен менеджеру аккаунта.