edit Я нашел этот драгоценный камень, который добавляет роли активному администратору https://github.com/yhirano55/active_admin_role
, почему он должен быть в модели?Код выглядит так, как будто его нужно поместить в контроллер, allow_params ...
Я бы использовал pundit .Я вижу, что банка может была обновлена 5 лет назад.Они похожи.
Pundit Repo: https://github.com/varvet/pundit
Он использует политики, поэтому вы создаете политику для каждой модели.
class PostPolicy < ApplicationPolicy
def update?
user.admin? or not record.published?
end
end
, где вы можете проверить свои флаги наобновить или создать или показать или что-нибудь ...
В действии вы используете что-то вроде этого authorize @post,: update?
Цитата из их документа
В этом случае вы можете представить, что авторизация сделала бы что-то вроде этого:
unless PostPolicy.new(current_user, @post).update?
raise Pundit::NotAuthorizedError, "not allowed to update? this #{@post.inspect}"
end
Надеюсь, это поможет
PS Если вам нужно более сложное решение.Я бы создал модель Role, в которой я мог бы указать модель, права на чтение и запись.Я бы связал его со своим пользователем с has_many ролями, и в моей политике сделайте что-то вроде этого:
class PostPolicy < ApplicationPolicy
def get_role
user.roles.where(model: "Post").first
end
def update?
user.get_role.write? or not record.published?
end
end
Или, может быть, есть лучший способ использовать его как-то в модели политики ...