所以我使用Pundit检查授权访问权限。
在我的应用程序中的每个控制器之前,我有
class ReservationsController < ApplicationController
before_action :authorize_reception!
使用辅助模块:
module AuthorizeMethods
def authorize_admin!
authorize User, :admin?
end
def authorize_reception!
authorize user, :allow_reception?
end
此用户政策
class UserPolicy
def initialize(user, _resource)
@user = user
end
def admin?
@user.hotel_admin
end
def reception?
admin? || @user.allow_reception
end
我现在想要将接收角色的访问限制为动作:来自预约控制器的索引。
我想出了这个:
class ReservationsController < ApplicationController
sip_before_action :admin!, only: [:index]
before_action :authorize_reception!, only: [:index]
因此,对于每个其他操作,它需要一个管理员,而对于索引,只需一个接收角色。但我的接收角色是,可以访问控制器的所有操作(编辑,删除,创建),而不仅仅是索引。