我正在跟进我之前遇到的问题。我能够让代码为三个角色工作,但我需要在组合中包含 4 个角色。
问题:我有 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