Я запускаю Pundit в своем приложении Rails для авторизации. Кажется, я все понял, но хочу знать, как ограничить действия по редактированию или обновлению определенным полем.
Например, пользователь может редактировать свое user.first_name, user.mobile или user.birthday и т. д., но не может редактировать свою user.role. По сути, моя логика такова: пусть пользователь редактирует все, что является косметическим, но не функциональным.
Эти поля должен иметь возможность редактировать только пользователь с ролью «super_admin» (которую я настроил в user.rb с помощью таких методов, как показано ниже).
def super_admin?
role == "super admin"
end
def account?
role == "account"
end
def segment?
role == "segment"
end
def sales?
role == "sale"
end
def regional?
role == "regional"
end
def national?
role == "national"
end
def global?
role == "global"
end
У меня практически есть файл user_policy.rb
с чистого листа, в котором действия по обновлению и редактированию установлены по умолчанию.
def update?
false
end
def edit?
update?
end
Может быть, я совершенно неправильно думаю об этом и должен просто обернуть user.super_admin? if вокруг поля роли на странице показа пользователя, но это кажется неправильным, если я использую эту тактику только для безопасности.