Запретить доступ к списку пользователей на Ruby на Rails - PullRequest
1 голос
/ 25 мая 2020

В настоящее время я использую Pundit в качестве гем авторизации в моем приложении Rails. По сути, я создал эту страницу, если вы являетесь администратором (что означает, что для поля установлено значение admin, равное true) you can view this page and delete some existing user on the database viahttp://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

Но это не сработало, поскольку пользователи, не являющиеся администраторами, все еще могут получить доступ к странице. Что еще мне делать?

1 Ответ

0 голосов
/ 25 мая 2020

In user_policy:

class UserPolicy < ApplicationPolicy
  class Scope < Scope
    def resolve
      scope.all
    end
  end

  def index?
    user.admin? 
  end 
end

В контексте Pundit user равно current_user, поэтому это будет оцениваться как true, если user является администратором (и false иначе).

А в вашем контроллере:

def index
  @users = policy_scope(User)
  authorize User
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...