2016-03-09 2 views
0

Я новичок в Rails и упражнениях. У меня две пользовательские модели: Student и Prof. Я добавил роль администратора в модель Student с перечислением.Авторизация авторизации, когда 2 пользовательских модели + роль администратора

Я хочу, чтобы профиль Prof профиля редактировался владельцем профиля или администратором.

Вот мой код в profile_policy.rb:

def update? 
is_owner? || user.admin? if user 
end 
[...] 
def is_owner? 
record.prof == user 
end 

и в моем шоу зрения, я хочу, чтобы показать ссылку «редактировать» только на основе разрешения пандита:

<%= link_to 'Edit', edit_prof_profile_path(@prof.id, @profile.id) if policy(@profile).edit? %> 

В мой контроллер приложения У меня есть пользовательский метод current_user, который включает в себя как current_student, так и current_prof.

Проблема заключается в том, что user.admin? вызывает метод admin на модели Prof, у которого нет такого метода, поэтому я получаю ошибку undefined method admin?, когда Prof, который не является владельцем, хочет посетить профиль.

Как это исправить?

ответ

0

Это решение, которое в конечном счете работал для меня, используя try()

В моем файле политики, я добавляю проверки этот пользовательский метод, если пользователь имеет или не в role определяется как "admin. Этот метод вернет true или false, как и ожидал Пандит.

def is_admin? 
    user.try(:role) == "admin" 
end 
Смежные вопросы