2016-01-16 5 views
4

В настоящее время я использую Rails 4.1.14 с CanCanCan 1.13.1 и определенные гранулярные разрешения на уровне модели/записи. Админы могут управлять всеми статьями, но пользователи могут редактировать только статьи, которые они создали.Разрешения на уровне поля с использованием CanCanCan или Pundit

Чтобы предотвратить регулярные пользователи для редактирования определенных полей, я делаю поля видимыми в rails_admin в зависимости от роли.

visible do 
    bindings[:object].id == bindings[:view].current_user.roles.include? :admin 
end 

Я также использую https://github.com/aasm/aasm камень и создал пользовательские действия так что пользователь может перемещать записи в новые состояния.

Но я действительно хочу включить разрешения на уровне поля в зависимости от роли/записи пользователя. Я не могу найти никаких документов на страницах CanCanCan или https://github.com/elabs/pundit.

У кого-нибудь есть опыт?

ответ

4

Вы имеете в виду, что администратору должно быть разрешено редактировать все поля записи, но редактору разрешено изменять поля x и y?

Да, это возможно в pundit, поскольку оно интегрируется с сильными параметрами (которые вы должны использовать в любом случае). Также есть пример в pundit readme (см .: Сильные параметры). Я упростил пример из ридх:

# post_policy.rb 
def permitted_attributes 
    if user.admin? 
    [:title, :body, :tag_list] 
else 
    [:tag_list] 
end 

# posts_controller.rb 
@post.update_attributes(permitted_attributes(@post)) 

permitted_attributes помощника в контроллере обеспечивается пандитом и автомагический вызывает permitted_attributes метода infered политики.