2016-03-10 3 views
0

Я использую Pundit для разрешения разрешений. Я хочу профили моего пользователя, чтобы быть видимыми всем этом в моем user_policy.rb, у меня есть:Pundit: user_signed_in helper

def show? 
    true # Anyone can view a show 
    end 

В моих пользователях/show.html.erb, кнопка «изменить профиль» отображаются только в том случае, если:

<% if policy(@user).update? %> 
    <!-- show edit button --> 
<% end %> 

вопрос заключается в том, что, когда я пытаюсь получить доступ профиля и я не вошли в систему, Пандит ищет «пользователь»:

def update? 
    record == user || user.admin == true # Only user creator can update it 
end 

у меня есть ошибка о том, что пользователь ноль поэтому администратор ndefined. Я хотел сделать это:

def update? 
    if user_signed_in? 
    record == user || user.admin == true # Only user creator can update it 
    else 
    false 
    end 
end 

но user_signed_in? это помощник-помощник, недоступный в Пандите. Есть ли эквивалент, который я мог бы использовать, или лучший способ сделать это?

ответ

2

Не могли бы вы сначала проверить, существует ли пользовательская переменная?

def update? 
    user && (record == user || user.admin == true) # Only user creator can update it 
end 
3

Как сказал Ричард, вы должны убедиться, что есть пользователь в первую очередь, и если он является владельцем или администратором. Мне нравится читать его так:

def update? 
    user.present? && (is_owner? || is_admin?) 
    end 

private 

def is_owner? 
    record.user == user 
end 
def is_admin? 
    user.admin #In your case user.admin is simple enough so you don't need that, but sometimes it's not. 
end 
+0

Пользователь также может обрабатывать случай зарегистрированного, но неподтвержденного пользователя - функциональность разработки. Довольно удобно – Jerome

Смежные вопросы