1

私はまだレールとアクティブレコードにかなり慣れていないので、見落としがある場合はご容赦ください。

ユーザー定義の役割を使用してアクセス許可スキームを作成するために、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

私はこれをどのように実装するのが最善かについてぐるぐる回り続けているので、私はこれについて頭を悩ませていると思います。

4

2 に答える 2

1

これを実装する最善の方法は、これを実装しないことです。ユーザー、ロール、権限を支援するために、すでに作成されている多くの gem の 1 つを使用することをお勧めします。例えば:

acl9
http://github.com/be9/acl9

acl9 は、パーミッションとロールをユーザーに追加するために使用できる優れた小さな DSL を提供します。セットアップは非常に簡単で、自分でコードを書く手間が省けます。

acl9 は、認証のためのクリアランス ( http://github.com/thoughtbot/clearance ) で非常にうまく機能します。

于 2009-11-12T00:34:25.203 に答える
0

jonniiに同意しますが、ライアンベイツのカンカンを見てみることをお勧めします

実装と使用ははるかに簡単だと思います。

于 2010-05-04T07:03:05.233 に答える