CanCan Авторизация Контроллера Ресурса - PullRequest
3 голосов
/ 03 апреля 2011

В моем приложении пользователю разрешено назначать другого пользователя в качестве своего "менеджера по работе с клиентами", а менеджеру по работе с клиентами будет разрешено изменять всю информацию о пользователе.Я определил следующую способность:

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 для авторизации доступа к ресурсам.Пользователь может назначить другого пользователя в качестве менеджера аккаунта.Пользователь имеет вложенные ресурсы.Проблема: вложенный ресурс не доступен менеджеру аккаунта.

1 Ответ

1 голос
/ 04 апреля 2011

Я решил это, выполнив следующее:

1) заменил load_and_authorize_resource :publication просто загрузкой ресурса load_resource :publication
2) Добавил before_filter :authorize после вызова load_resource со следующей реализацией:

def authorize
    raise CanCan::AccessDenied unless can? :manage, @publication, @user
end

Это работает, но я надеялся, что это удастся решить, если есть такая вещь.Мысли и отзывы приветствуются.

...