3

Role-based access controlに関するいくつかの記事を読みましたが、このケースを処理するのに十分明確ではありません:「ユーザーは自分の投稿を削除できる」を実装する方法は?

通常の役割と権限の場合、ユーザーが何かを行うと、ユーザーが持っている役割と権限を確認し、ユーザーがそれを実行できるかどうかを判断できます。

しかし、「ユーザーが自分の投稿を削除できる」ためには、投稿が自分のものかどうかを確認する必要があります。そのため、何かをハードコーディングする必要があり、制御システムの制御が及ばなくなります。

私は何かを見逃していますか、そしてそれを正しく行う方法は?

4

2 に答える 2

4

あなたが解決しようとしている問題は、私には完全には明らかではありません。誰が何にアクセスできるかを定義する必要があるため、常に何かを「ハードコーディング」する必要があります。何かが制御システムの外にあると判断した場合でも、それは実際には実装に依存します。

あなたがやろうとしていることについて、私は一般的に「所有者」の役割を定義し、次のようなアクセスを定義します。

"owner" can "delete" "resource"

したがって、ユーザーが実際に所有者であるかどうかを確認するプログラム部分が必要です。通常、これは、各リソースを「ownerId」プロパティなどに関連付けることで実行できます。userId == ownerId の場合、現在のユーザーの役割は「所有者」です。

于 2012-10-28T15:15:04.317 に答える
2

これには、「ビジネスルール」のRBACレイヤーでのサポートが必要です。そのようなものが利用可能であるとき、それはあなたに必要とされる動的な決定のタッチを提供します。基本的に、bizルールは、権限がチェックされるたびに実行されるコードの一部です。このコードは静的ですが、パラメーターが渡されることを期待しています。次に例を示します(PHPを表示)。

// This code expect two given parameters: $params['owner_id'] and $params['user_id']
if ($params['owner_id'] == $params['user_id']) {
  return true;
}
return false;
// This code assumes that returning true means 'permission granted' and returning 
// false means permission not granted

基盤となるテクノロジーについては述べていません。それはあなたがより正確な答えを得るのを助けるかもしれません。

于 2012-10-28T15:48:40.567 に答える