私はまだレールとアクティブレコードにかなり慣れていないので、見落としがある場合はご容赦ください。
ユーザー定義の役割を使用してアクセス許可スキームを作成するために、3 つのモデルを結び付けようとしています (そして、実際に結び付けようとしている 4 つ目のモデル)。
class User < ActiveRecord::Base
has_many :user_projects
has_many :projects, :through => :user_projects
has_many :project_roles, :through => :user_projects
end
class Project < ActiveRecord::Base
has_many :user_projects
has_many :users, :through => :user_projects
has_many :project_roles
end
class ProjectRole < ActiveRecord::Base
belongs_to :projects
belongs_to :user_projects
end
class UserProject < ActiveRecord::Base
belongs_to :user
belongs_to :project
has_one :project_role
attr_accessible :project_role_id
end
project_roles モデルには、ユーザー定義のロール名と、特定のロールが特定のタスクに対する権限を持っているかどうかを定義するブール値が含まれています。アプリケーションのプロジェクト部分のどこからでも簡単に参照できるエレガントなソリューションを探しています。
私はすでに、アプリケーション全体にロール システムを実装しています。私が本当に求めているのは、ユーザーがプロジェクトごとに自分の役割を管理できるようになることです。すべてのプロジェクトには不変のデフォルトの管理者ロールが設定され、プロジェクト作成者はプロジェクトの作成時に追加されます。
ユーザーがロールを作成しているので、関連付けを介してプロジェクトとユーザー モデルからロール名のリストを取得できるようにしたいと考えていますが (表示目的で)、アクセスをテストするために、単にロール名で参照したいと思います名前で参照せずにアクセスできます。
おそらくこのようなものですか?
def has_perm?(permission, user) # The permission that I'm testing
user.current_project.project_roles.each do |role|
if role.send(permission) # Not sure that's right...
do_stuff
end
end
end
私はこれをどのように実装するのが最善かについてぐるぐる回り続けているので、私はこれについて頭を悩ませていると思います。