Способность Канканкана для конкретного случая

Я использую cancancan gem для правил авторизации на основе ролей. Мне нужно подготовить что-то вроде:

can :read, Post, Post.status = 1

Это означает, что пользователь может читать сообщение со статусом = 1. Как я могу это сделать?


person Src    schedule 28.06.2015    source источник


Ответы (2)


Согласно документам, это должно быть так же просто, как

can :read, Post, status: 1

Вы должны использовать столбцы базы данных для этих условий (т. е. убедитесь, что status является столбцом в таблице posts).

Если это не так или вам нужно что-то более сложное, чем хэш условий, вы можете посмотреть в Определение способностей с помощью блоков

Надеюсь это поможет.

person Bart Jedrocha    schedule 28.06.2015
comment
неинициализированная константа Post::Status. Статус - это столбец в таблице сообщений - person Src; 28.06.2015
comment
Вы пишете Status с большой буквы? Все должно быть в нижнем регистре (например, status) - person Bart Jedrocha; 28.06.2015
comment
Wat? Не могли бы вы опубликовать полную строку кода, который вы используете? - person Bart Jedrocha; 28.06.2015
comment
статус, написанный с большой буквы, является выводом ошибки. - person Src; 28.06.2015
comment
контроллер: authorize! :show, @post способность.rb: can :read, Post, status = 1 - person Src; 28.06.2015
comment
Как говорится в документации, это должен быть хэш условий. Так что can :read, Post, status: 1 и НЕ can :read, Post, status = 1 - person Bart Jedrocha; 28.06.2015
comment
Извините, я разместил код с ошибкой, на самом деле я использую код can :read, Post, status: 1 - person Src; 28.06.2015
comment
Статус зарезервированное слово? Потому что, если я использую id или другое поле (даже в блоке), все работает нормально. Кроме того, отладка показала, что статус существует в переданной переменной Post. - person Src; 28.06.2015
comment
Это не зарезервированная работа. Не уверен, что происходит с вашим кодом, но если вы не можете понять это, я бы предложил опубликовать отдельный вопрос. Я создал рабочий образец приложения с тем, что я описал выше, и он отлично работает. См. здесь - person Bart Jedrocha; 29.06.2015
comment
Я переименовал столбец с status на state, и все работает нормально, запутался... - person Src; 29.06.2015
comment
Трудно сказать, не взглянув на остальную часть вашего кода. Если этот ответ помог вам, пожалуйста, примите его и проголосуйте. Спасибо. - person Bart Jedrocha; 29.06.2015

Пытаться

can(:read, Post, status: 1)
person stoodfarback    schedule 28.06.2015
comment
неинициализированная константа Post::Status, мой почтовый контроллер: authorize! :show, @post - person Src; 28.06.2015