ユーザーは同じスタジオ(user.studio_id)に属している場合、ユーザー#インデックスの他のユーザーのみを見ることができます。レール3.2.2、cancan 1.6.7。インデックスが失敗すると、各セッションで最初にセッションが許可され、次に適切に許可されます。
ほぼ完璧に動作します。唯一の問題は、ユーザー(管理者を含む)がユーザー/インデックスに初めてアクセスするときに、不正なメッセージが表示されることです。彼らがやり直すと、適切なレコードだけが表示されたインデックスが取得されます。彼らが最初にそこに行くときに、どうすればそれを認可で窒息するのを止めることができますか?
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
can :read, User
if user.role? :Student
...
cannot :read, User, ["studio_id <> ?", user.studio_id] do |u|
u.studio_id != user.studio_id
end
can :update, User, ["id = ?", user.id] do |u|
u.id == user.id
end
end
if user.role? :Teacher
...
can :update, User, ["id = ?", user.id] do |u|
u.id == user.id
end
end
if user.role? :Director
...
can :manage, User, ["studio_id = ?", user.studio_id] do |u|
u.studio_id == user.studio_id
end
can :create, User
end
cannot :delete, [Studio, Event]
cannot :change_studio, [User]
if user.role? :Admin
can :manage, :all
can :see_ids, :all
can :change_studio, User
end
end
end
end
ability.rb
がUserController
class UsersController < ApplicationController
respond_to :html, :xml, :json
load_and_authorize_resource #:only => [:show,:new,:destroy,:edit,:update]
def index
end
...
end
ダブル 'DEFによって許可初期化(ユーザ) 'abiltiyはコピーエラーですか? – tonymarschall
はい..それはスタックオーバーフローでそれを入れてタイプミスでした。それをキャッチしていただきありがとうございます。 –
Bah ...実際のコードをもう一度チェックした後、スタックフローのコピーエラーではありませんでした。私は実際に自分のコードでそのくそを持っていた。今、私はばかみたいですが、それを覚えてくれてありがとう。 –