我的权限在CanCan wiki上描述的数据库中定义。我想:index
只为我的权限表中的 id 授权,但如果没有资源被授权,仍然显示索引页面。
如果我使用load_and_authorize_resource
,它会根据权限加载资源。如果我没有,index
则无法访问该操作。我在资源上被拒绝访问。
如果我仍然想允许在:index
没有授权资源的情况下访问操作,我会看到两个选项:
选项 1(讨厌它) :手动加载索引的资源。
class FirmsController < ApplicationController
load_and_authorize_resource :except => :index
def index
@firms = user.permissions.where{action: ["index", "manage", "read"], subject_class: "Firm"}
end
end
选项 2(meh):为 :index 添加一个具有 id: [] (无)约束的功能,然后用我的数据库权限覆盖它。
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
can :create, Firm
can :index, Firm, id: []
user.permissions.each do |permission|
if permission.subject_id.nil?
can permission.action.to_sym, permission.subject_class.constantize
else
can permission.action.to_sym, permission.subject_class.constantize, :id => permission.subject_id
end
end
end
end
选项 3?
你能想出一个更清洁的解决方案吗?