2

階層型ユーザー アカウント システムの設定に関連する優れたリソースを知っている人はいますか? 私は現在 1 つをセットアップしており、より複雑なロジック (特に権限の決定) に苦労しています。私は、私を助けるためにいくつかのリソースを見つけることができるかもしれないと思っていました.

背景: ネストされたグループ階層を可能にする Web CMS 用のユーザー アカウント システムを構築しています。各グループは、読み取り、書き込み、追加、および削除へのアクセスを許可/拒否できます (そのグループに対して明示的に、またはその親の 1 つによって暗黙的に)。さらに、このシステムでは、ユーザーが複数のグループのメンバーになることもできます。――ここが行き詰ってますね。すべてをセットアップしましたが、特定のユーザーのペミッションを決定するための実際のロジックに苦労しています。

4

4 に答える 4

3

CakePHP のマニュアルには、アクセス制御リストがどのように機能するかについての優れた説明があります。

http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html

于 2008-09-16T18:34:27.487 に答える
2

特定のグループに設定された権限をビット マスクとして表します。ビット マスクを一緒に OR すると、結果のアクセス許可セットが得られます。

@アレックスの更新:

私はこの回答を3年前に書きましたが、次のことをほのめかしていたと思います...

質問から

ネストされたグループ階層。各グループは、読み取り、書き込み、追加、および削除へのアクセスを許可/拒否できます (そのグループに対して明示的に、またはその親の 1 つによって暗黙的に)。さらに、このシステムでは、ユーザーが複数のグループのメンバーになることもできます。――ここが行き詰ってますね。すべてをセットアップしましたが、特定のユーザーのペミッションを決定するための実際のロジックに苦労しています。

システム内のグループ (またはロール) の合計権限セットに一致するビットマスクを割り当てます。

00(2ビットを使用すると、ここでは簡単になります!)

最初のビットはPermission A、2 番目のPermission B.

ここで、グループ A が次の権限セットを付与するとします: 01.

... そして、グループ B が次の権限セットを付与するとします: 10.

ORグループの任意のセット内のユーザーの結果のアクセス許可セットを取得するには、アクセス許可セットのビット マスクに対して論理を実行できます。

Permission set for Group A   01
Permission set for Group B   10 OR 
                             ----
Resultant permission set     11 (i.e. both permission A and B are conferred)

質問者のシステムの詳細はわかりませんが、ここで概説したシステムを拡張して、さまざまな論理演算子を使用してさまざまなグループ構成動作を実現できます。

于 2009-01-19T15:48:23.043 に答える
1

Andrew File Systemのパーミッションを見てください。ユーザーは、管理者権限と ACL を選択的に割り当てながら、独自のグループを作成および管理できます。厄介な詳細の多くは、モデルで既に解決されていることに気付くかもしれません。

編集: AFSドキュメントへのより良いリンクは次のとおりです:

http://www.cs.cmu.edu/~help/afs/index.html

グループに関するセクションは次のとおりです。

http://www.cs.cmu.edu/~help/afs/afs_groups.html

于 2008-09-16T18:31:43.280 に答える
1

私はこれを以前に正確に行ったことがあり、その実装は簡単ではありません。SecurityPermission クラスを見たいと思うでしょう。

[ http://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission.aspx][1]

私は以前に XML を利用して (これをもう一度行うかどうかはわかりません)、その XML を CLR ストアド プロシージャを介して SQL サーバー内の XML 列にアクセス許可リストとして格納することでこれを行いました。XML には「パーミッション」と呼ばれる要素があり、パーミッションは実際にはコード内の ENUM になります。各パーミッションは、SecurityPermission クラスの新しい実装でした (上記のリンク)。ユーザーは、SQL サーバーで定義されたグループに関連付けられ、ユーザーがグループに追加/削除されると、XML ドキュメントが更新されて、離れていたグループが反映されます。の。

ユーザーがログインするとすぐに、ユーザーの資格情報がアプリケーション ストア (セッション) に読み込まれ、それに応じてアクセスされます。認証が必要な場合、アプリケーション ストア内の XML がプルダウンされ、"FromXML" メソッドを介して SecurityPermission にロードされます。その時点で、次の方法を使用して、ユーザーに権限があるかどうかを判断します。

  • 要求する
  • 交わる
  • 連合
  • 制限なし
  • IsSubSetOf

などなど

その時点で、Demand を実行した後、SecurityPermissions でセキュリティ ルーチンをどのように実装したかに従って、呼び出し元がアクセス権を持っているかどうかを判断できました。

繰り返しますが、これはかなりの詳細を省略していますが、これで正しい道をたどることができるはずです。

この名前空間も見てみましょう: [2]: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx "System.Security.Permissions"

于 2008-09-16T18:39:53.497 に答える