これらの 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
または、このモデルに変数を追加して、アクセスのより複雑なロジックを作成できます