2

動的な役割の割り当て(役割/特権)を提供する必要があります。より明確に言えば、エンドユーザーは役割を作成し、新しいユーザーにアクセス許可を割り当てることができる必要があります。そこで、ユーザーごとにロールと権限をテーブルに格納することを考えていました。

これを行うための賢い方法はありますか(他のプラグインはありますか?)、または宣言型承認を使用してこれを行うためのコードを作成する必要があります。いくつかの光が役立ちます。ありがとう!

4

3 に答える 3

1

私は最近プロジェクトでCanCanを使用しましたが、それはかなりクールだったと思います。Abilityクラスを作成し、それを使用して、ユーザーがアクションを実行できるかどうかを判断します...メソッド内のテーブルにアクセス許可が存在するかどうか、またはルールセットがアクションを許可するかどうかを確認できます。

このサンプルコードはすべて、githubreadmeから取得しました。

class Ability
  include CanCan::Ability

  def initialize(user)
    if user.admin?
      can :manage, :all
    else
      can :read, :all
    end
  end
end

次に、ビューとコントローラーで認証レベルを確認できます

<% if can? :update, @article %>
  <%= link_to "Edit", edit_article_path(@article) %>
<% end %>


def show
  @article = Article.find(params[:id])
  authorize! :read, @article
end
于 2010-08-23T12:10:31.387 に答える
1

Cancan は単純なプロジェクトや開始プロジェクトに最適ですが、モノリシック アプリの場合は必ずラップする必要があります。Cancan は初期のソリューションであるべきですが、最終的なソリューションではありません。ポリシー オブジェクト (評論家) を見ると、独自の承認モデルを構築する必要があるコードの匂いがする可能性があります。統合のような承認はクライアントごとに異なります。より動的なソリューションを探している場合、または話すにはあまりにも多くの役割がある場合、cancan は適していません。よりデータ駆動型のセキュリティ モデルが必要になる場合があります。たとえば、他の誰かにエンティティへのアクセスを許可できる場合です。

于 2014-12-29T02:39:10.187 に答える
1

解決策に近づくために、これらに答えてみてください。

  1. 役割自体は動的ですか? つまり、ロールに割り当てられたさまざまな権限を、管理者が Web インターフェイスを介して変更できますか? はいの場合、この情報をデータベースに保存する必要があります。役割が事前に定義されているブログのようなシステムの場合。管理者、ゲスト、モデレーター、宣言的承認は魅力のように機能します。
  2. パーミッションと UI の結合はどの程度強力ですか? (制限する必要があるのは数か所だけの場合もあれば、ソーシャル ネットワークのように、権限がはるかに複雑で UI と密接に結びついている場合もあります)。非常に密結合している場合、つまり、1 つのアクションがあらゆる種類のロールで利用可能であるが、これらのロールが実行するアクションは定義によって制限されている場合、宣言型承認 (または類似のもの) はあまり役に立ちません。レガシー システムが必要です。
于 2010-08-23T10:27:35.763 に答える