2

私はレールを初めて使用し、さまざまなモジュールでプロジェクトに関連する特定のタスクの権限をユーザーに付与したいと考えています。

私は2つのモデル「ユーザー」と「プロジェクト」を持っています...「user.rb」にはhas_many:プロジェクトと「project.rb」にはbelongs_to:userです。このモデルには「user_project.rb」という名前の両方のモデルを組み合わせたもう1つのモデルがあり、proj_idとuser_idが保存されています。

許可を与えたいのですが、その後、割り当てられた許可に従ってメッセージとタスクを作成するための現在のユーザーへの許可も確認します。

アクセス許可を定義する場所と、それがビューでどのように機能するか....

4

1 に答える 1

0

これらの ID を保存するためだけに user_project.rb を作成した場合は、削除してください。

これは、コントローラーに before_filter を記述する必要があるようです

class ProjectsController << ApplicationController
  before_filter :current_user_required, only: [ :edit, :update ]

  #there def of actions

  private 

  def current_user_required
    unless current_user == @project.user
      flash[:error] = 'error 403'
      redirect_to :back
    end
  end

@project を見つけたら、編集および更新アクションを次のように実行できます。

@project = current_user.projects.find(params[:project_id]) #need to change :project_id

モデル メッセージ (belongs_to :project および Project has_name: メッセージ) を作成し、project.user に対してのみ作成と編集のアクセス権を付与する場合は、モデルの before_filter または検証を使用して実行できます。

class Message << ActiveRecord::Base
  validate :author_is_project_user, on: :create

  private

  def author_is_project_user
    errors.add :base, 'author not is project user' unless self.author == self.project.user
  end
end

これによれば、別のものの許可を定義できます

また、別のユーザーの許可を取得したい場合は、:user と :project に属するモデルを作成し、その存在する before_filter をチェックインする必要があります。

このようなもの:

class Permission << ActiveRecord::Base
  belongs_to :user
  belongs_to :project

  scope :about, -> project { where project_id: project }
  scope :of_user, -> user { where project_id: project }
end

そしてユーザーモデルでは、次のようなメソッドを定義します

def access_to_project? project
  Permission.about(project).of_user(self).first.present?
end

または、このモデルに変数を追加して、アクセスのより複雑なロジックを作成できます

于 2013-04-14T11:05:52.777 に答える