В настоящее время я использую Pundit в качестве гем авторизации в моем приложении Rails. По сути, я создал эту страницу, если вы являетесь администратором (что означает, что для поля установлено значение admin
, равное true) you can view this page and delete some existing user on the database via
http://localhost: 3000 / dashboard / users `
Я уже поместил это в свое меню:
<% if current_user.admin === true %>
<%= link_to "Users List", users_path, class: "dropdown-item #{active_class_white('/dashboard/contacts')}" %>
<% end %>
Что скроет эту ссылку, если пользователь не является администратором. Тем не менее, это все еще может быть доступно, если не администратор посещает URL напрямую.
Я уже настроил свой файл pundit через application_pundit.rb
файл, который содержит ff:
class ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
def index?
false
end
def show?
scope.where(:id => record.id).exists?
end
def create?
false
end
def new?
create?
end
def update?
false
end
def edit?
update?
end
def destroy?
false
end
def scope
Pundit.policy_scope!(user, record.class)
end
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
scope
end
end
end
Теперь я не знаю, что делать, как предотвратить других пользователей, которые не иметь доступ администратора для просмотра этой страницы и иметь возможность удалять любых пользователей из базы данных.
Пожалуйста, помогите.
ОБНОВЛЕНИЕ: Я создал user_policy.rb
и разместил коды ff:
class UserPolicy < ApplicationPolicy
def index?
user.admin?
end
def destroy?
user.admin?
end
end
Но это не сработало, поскольку пользователи, не являющиеся администраторами, все еще могут получить доступ к странице. Что еще мне делать?