1

ユーザー権限を処理するために既に declarative_authorization を使用している Rails 2.3 アプリを使用しています。各ユーザーは、特定のモデル (ほとんどは通常の CRUD アクションですが、いくつかの特別なアクション) に対するアクセス許可を持つ 1 つのグループ (特別な役割ではありません) に属しています。これはすべて、通常のすぐに使用できるモードの declarative_authorization で正常に機能します。

モデル タイプに関して、管理者が特定のユーザー グループに権限を設定できるようにしたいと考えています。たとえば、新しいグループ Foo を作成し、それに何人かのユーザーを割り当て、グループ Foo のユーザーがモデル Bar のオブジェクトを c/r/u/d できるかどうかをチェックボックスで決定します。

以前に acl9 を使用したことがあり、それを機能させる方法がわかったと思います。私は最近、CanCan のファンになっていますが、それを簡単に行う方法がわかりません。declarative_authorization でこれができるのであれば、私はそれを使い続けますが、弾丸をかじって切り替える準備はできています。

これを達成するための最良の方法はどのプラグインでしょうか? 仕事をするために declarative_authorization を取得する方法はありますか? CanCan のエレガントな使い方は?データベースのパフォーマンスなど、注意すべき点はありますか?

このアプリを Rails 3.1 にアップグレードすることは納得できますが、2.3 互換のソリューションを見つけたいと思っています。

同様の質問をいくつか見ましたが、満足のいく回答はありません Rails Dynamic Role-Based Authorization plugin?

これは、cancan の場合 https://github.com/ryanb/cancan/wiki/Role-Based-Authorization

4

1 に答える 1

0

私はStoneWall gem のファンです。承認チェックは Ruby ブロックの形式になっているため、そのブロックでレコードを検索し、問題のユーザーが承認されているかどうかを確認できます。

多くのドキュメントはありませんが、アイデアは次のとおりです。

a_user_object.may_read?(object)

が Todo インスタンスの場合object、Stonewall は Todo モデルを調べてreadブロックを実行します。

# app/models/todo.rb

stonewall do |s|

    s.action :read do |todo, user|
      todo.owner == user  # only the owner of a todo item may read the item
    end
end

このアプローチにより、次の 2 つのことが容易になります。

  1. readはただのRubyブロックなので、あなたがしたいことは何でも起こります
  2. アクションには任意の名前を付けることができるため、ユーザーが todo アイテムにコメントする権限を持っているかどうかを確認したい場合 (たとえば)、 を作成して次のs.action :commentようにアクセスするだけです。a_user_object.may_comment?(object)
于 2011-10-24T14:10:05.140 に答える