私の権限は、 CanCanwikiで説明されているようなデータベースで定義されています。:index
権限テーブルのIDのみを承認したいのですが、リソースが承認されていない場合でもインデックスページを表示します。
を使用するload_and_authorize_resource
と、権限に基づいてリソースが読み込まれます。持っていない場合、index
アクションにアクセスできません。リソースでアクセスが拒否されました。
:index
リソースが許可されていない状態でアクションへのアクセスを許可したい場合は、次の2つのオプションが表示されます。
オプション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):id:[](nothing)の制約を持つ:indexの機能を追加し、後でデータベースのアクセス許可で上書きします。
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?
よりクリーンなソリューションを考えられますか?