2013-11-12 2 views
-1

Если у меня есть пользовательский объект и у пользователя есть один basicinfo. В пользовательском шоу действий у меня есть:Авторизовать связанный объект при использовании драгоценного камня pundit

def show 
    @user = User.find params[:id] 
    authorize @user 
end 

И в show.html.erb я должен показать basicinfo пользователя, такие как:

User name is: <%= @user.basicinfo.name %> 

В этом случае я должен также санкционировать basicinfo в действии пользователя шоу?

def show 
    @user = User.find params[:id] 
    authorize @user 
    authorize @user.basicinfo, :show? 
end 

ответ

1

Разрешение распространяется на все действия.

Если вы хотите, чтобы отфильтровать некоторые элементы в виде вы можете сделать это на специальной основе, в основном применяя все, что вы атрибут используется в классе xxxPolicy (не указано выше)

Обращение авторизации пользователя это, возможно, слишком сложно с помощью Пандиту

def initialize(user, user) 

Я определенно фильтрации в представлениях, когда речь идет о действиях пользователя

+0

Спасибо за ваш ответ! – xnjiang

+0

Второй avenu для вашей модели пользователя - разместить логику в контроллере. Pundit был предназначен для устранения такой утомительной работы, но по модели пользователя это не так просто. Я поддерживаю pundit для всех других моделей, в то время как в пользовательской модели я решаю, хочу ли я, чтобы контроллер удалял неавторизованных пользователей, или мне нужно фильтровать данные в представлении на основе фактического контекста. – Jerome