Я слежу за проблемой, которая у меня была before. Мне удалось заставить код работать на три роли, но мне нужно включить 4 роли в микс.Ограничить представление для различных ролей в pundit
Проблема: у меня есть 4 роли (пользователь, бизнес-пользователь, суперпользователь и администратор). Админы имеют доступ ко всему (пользовательский указатель). Супер пользователи могут видеть только пользователей и бизнес-пользователей (индекс пользователя).
Ошибка: у меня есть действующее приложение, которое позволяет администраторам иметь доступ ко всему, но мои супер пользователи могут видеть только пользователей (а не бизнес-пользователей). Я попытался переключиться в методе разрешения политики пользователя, для суперпользователя - role: 'business_user'
, чтобы убедиться, что это даже сработало. Ну, это не работает, и это только показывает мне users
(не business_users
). Вероятно, это простая проблема с рубином, которую я пропускаю.
Политика пользователя
class UserPolicy
attr_reader :current_user, :model
def initialize(current_user, model)
@current_user = current_user
@user = model
end
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
if user.admin?
scope.all
else user.super_user?
scope.where(role: 'user')
end
end
end
def index?
@current_user.admin? or @current_user.super_user?
end
end
пользователя контроллера
class UsersController < ApplicationController
before_filter :authenticate_user!
after_action :verify_authorized
def index
@users = policy_scope(User)
authorize @users
end
[rest of the controller]
пользователя Модель
class User < ActiveRecord::Base
enum role: [:user, :business_user, :super_user, :admin]
[rest of model]
end
В консоли вы можете рассказать мне, что у вас есть для 'User.where (role: 'user'). Count'? У вас есть некоторые пользователи с ролью «пользователь»? – Dougui
Да, в моем db у меня 4 пользователя. Один для каждой роли. Так что это даст мне «1». Я также сделал то же самое 'User.where (role: 'business_user'). Count', и у меня есть 1. – AGirlThatCodes