Rails3アプリで宣言型認証を使用することを計画しています。私は次のモデル関係を持っています:
class Role < ActiveRecord::Base
has_many :permissions, :dependent => :destroy
has_many :users, :through => :permissions, :uniq => true
end
class Permission < ActiveRecord::Base
belongs_to :user
belongs_to :role
belongs_to :context
end
class User < ActiveRecord::Base
has_many :permissions, :dependent => :destroy
has_many :roles, :through => :permissions
roles.map do |role|
role.name.underscore.to_sym
end
end
class Context < ActiveRecord::Base
has_many :contexts, :dependent => :destroy
end
ここでの概念は、さまざまなデータセットをさまざまなコンテキストにセグメント化することです。ただし、特定のユーザーは、コンテキストごとに異なる役割を持つ場合があります。たとえば、あるコンテキストでは管理者、別のコンテキストでは基本ユーザーです。コントローラとビューで使用するためにcurrent_userとcurrent_contextを実装しました。
if_attributeを使用して、適切なデータセットに対する適切なアクセス許可を参照する予定です。ただし、問題は、モデル(role_symbolsが定義されている)でcurrent_contextを参照できない、または参照すべきでない場合に、defrole_symbolsが特定のコンテキストでユーザーに関連付けられたロールのみを返すようにするにはどうすればよいかです。
何か案は?