3

アプリで認証/承認を構成する最良の方法について疑問に思っています。したい

  • サブドメインを使用している可能性がある、多くの企業アカウント

  • アカウントには多くのユーザーがいます

  • また、ユーザーは自分自身または同じアカウントを持つ別のユーザーによって作成されたレコードにのみアクセスできます。

私が行った調査では、devise / cancan / authlogic を奇妙で素晴らしい方法で組み合わせるための多くの組み合わせのアイデアが提供されていますが、同じ内のデータへのユーザー アクセスを制限する最良の方法を示すものはまだ見つかりません。モデル。

たとえば、次のようになります。


アカウント 1: ユーラシア

ユーザー 1: ボブ

ユーザー 2: ジム


アカウント 2: イースタシア

ユーザー 1: デイブ

ユーザー 2: アラン


Isbn 1: account_id は 1

Isbn 2: account_id は 2


Bob が Isbn 2 にアクセスしたり、クラッドできないようにするにはどうすればよいですか?

///更新もちろん、これを投稿したところ、Google fu が起動し、RyanB からCanCan 2.0の readme を見つけました。これは完璧に思えます:

> リソース

モデルの属性に基づいて承認を変更する必要がある場合はどうすればよいでしょうか? これを行うには、can の最後の引数として条件のハッシュを渡します。たとえば、自分が所有するプロジェクトへのアクセスを 1 人だけに許可したい場合は、:user_id オプションを設定できます。

4

3 に答える 3

5

承認にはCanCanを使用することをお勧めします。

あなたの能力モデルは次のようになります

can :manage, :isbn do |isbn|
  isbn.account == current_user.account
end

can? :manage, @post次に、コントローラー/ビューのように条件を使用できます。

于 2011-07-11T19:48:38.287 に答える
2

https://github.com/stffn/declarative_authorizationをご覧ください。あなたが求めているのとまったく同じだと思います(特定のレコードへのアクセスを制限できます)

したがって、あなたの例では、次のような認証を設定できます。

has_permission_on :isbn do 
    to :manage
    if_attribute :account_id => is_in {user.account_ids}
end
于 2011-07-11T19:43:48.220 に答える
0

XACMLを見たことがありますか?これは、認可のためのポリシーベースの宣言型フレームワークです。これは OASIS の標準でもあります。

XACML を使用すると、必要な属性 (ユーザー、リソース、アクション、またはコンテキスト属性) を取得して、使用事例を表現できます。

あなたの最初の要件は

ユーザーは、自分自身または同じアカウントを持つ別のユーザーによって作成されたレコードにのみアクセスできます。

XACML では、次のポリシーになります。

record.owner==user.id または user.accountId==record.accountId の場合にのみ、ユーザーはレコードにアクセスできます。

それで全部です!XACML のアーキテクチャは、アプリケーション/データを保護し、承認要求をポリシー デシジョン ポイント (PDP) に送信するコンポーネントであるポリシー エンフォースメント ポイント (PEP) を定義します。PEP は次のように述べています。「アリスはレコード #123 にアクセスできますか?」PDP は、Alice のアカウント ID とレコードのアカウント ID、および所有者をチェックします。PDP は最終的に「許可」または「拒否」を返します。

HTH

于 2013-01-17T10:55:44.137 に答える