私は以前CanCanを使っていましたが、それは素晴らしいですが、カスタマイズ可能なロール管理は必要ないこともあります。時々、私は管理者と他の人とを区別する必要があります。だから、私は通常、保護する必要があるコントローラとメソッドのために:authenticate_admin!
メソッドを書いています。Railsでのプラグイン以外のロール管理
私がもう少し複雑に感じたことは、ユーザーが所有するリソースのみを管理できることです。ユーザーはposts
を作成できますが、作成していない投稿を更新または破棄することはできません。だから、私は他の人たちがこれを最もドライな方法でどう扱ってきたかに興味があります。
ここに私の頭の上から、私がやったものだ:
アプリケーションコントローラで:次に
def user_can?(resource_user_id, current_user_id)
return true if current_user.is_admin
return true if resource_user_id == current_user_id
end
、問題のコントローラでは、私は
before_filter :can_manage_project?, :except => [:new, :create]
ような何かを行います
と
protected
def can_manage_project?
@project = Project.find(params[:id])
return true if user_can?(@project.user_id, current_user.id)
redirect_to user_path(current_user), :flash => {:error => "Sorry, you're not allowed to do that."}
end
比較的簡単な作業のために多くのコードが好きです。あなたはこの仕事をどのように処理しましたか?私はもっと優雅な解決策があると確信しています - 宝石やプラグインを使用するのが不足しています。
(実装の詳細については軽いので、答えとして投稿しておくべきかどうかは分かりません) –
これは大丈夫です...私は実装についてのさらなる理論も探していました。 – Slick23
* Whew *;)これは実際に私が今週末に演奏しようとしているものですが、同様のもの(もっと細かいことはありますが)とキャンタンゴが私を残しました。 –