プロジェクトのために探していますが、私は Authority を使用していません。私のドキュメントの読みに基づいて、これが機能する方法です:
このconfig
ファイルは、パッケージの構成を指定するためにあります。役割と権限はデータベースに保存できます (ただし、そうである必要はありません)。
構成ファイルは、パッケージにどのように動作するかを伝えるためにあります。したがって、たとえば、構成ファイルを使用すると、1 つまたは複数のアクセス許可のエイリアスを設定できます。エイリアスを使用する場合は、パッケージが期待どおりに機能するように、これを事前に行う必要があります。別の例として、ルール (詳細は後述) を config.xml で設定できます (設定する必要があります) 。
次の構成を検討してください (Authority docs から):
return array(
'initialize' => function($authority) {
$user = $authority->getCurrentUser();
//action aliases
$authority->addAlias('manage', array('create', 'read', 'update', 'delete'));
$authority->addAlias('moderate', array('read', 'update', 'delete'));
//an example using the `hasRole` function, see below examples for more details
if($user->hasRole('admin')){
$authority->allow('manage', 'all');
}
}
);
これは何をしているのですか?順を追って説明しましょう。
まず、これは、アプリケーションの初期化時に発生するはずの何かを指定しています。おそらく他にもイベントが発生する可能性がありますが、アプリの初期化後にルールを変更する理由がわかりません。アプリが初期化されると、クロージャーが呼び出されます。
クロージャーはこれを行います:
現在のユーザーを取得します - 以降のルールはログインしているユーザーによって異なります
create
いくつかのエイリアスを設定します - 私たちは怠け者で、read
、 などのルールを 1 つずつ指定したくないからです。代わりに使用できますmanage
。
次に、現在のユーザーをチェックします。管理者の場合、リソースmanage
に対するアクセス許可を取得しall
ます。
アクセス制御情報がデータベースに保存されている場合は、ここにロードして、そのデータを使用してルールを設定できます。
ここで、後でアプリを実行する際に、たとえばユーザーがユーザー レコードを作成できるかどうかを確認する必要があります。コントローラーでこれを行います:
if( Authority::can('create', 'User') ) {
User::create(array(
'username' => 'someuser@test.com'
));
} else {
// what happens if the user's trying to do something they're not
// allowed to do?
throw new Exception("No way man!");
}
これにより、構成で設定したルールがチェックされ、ユーザーがこれを行うことが許可されているかどうかが判断されます。そうでない場合は、(私の例では) 例外をスローします。あなたはおそらくそれをもっと優雅に扱いたいと思うでしょう。
権限により、権限をより正確に定義する柔軟性が得られます。例えば、
Authority::allow('manage', 'User', function($self, $user){
return $self->getCurrentUser()->id === $user->id;
});
このルールには、ユーザーが自分のユーザー レコードを管理できるようにするチェックが含まれていますが、他のユーザーのレコードは管理できません。これを行うには、上記の例を調整する必要があります。
if( Authority::can('update', 'User', $user) ) {
$user->username = 'someuser@test.com';
$user->save();
} else {
// what happens if the user's trying to do something they're not
// allowed to do?
throw new Exception("What do you think you're doing?!");
}
この場合、Authority インスタンスがクロージャーに渡され$self
、現在のユーザー ID が取得され、編集中のユーザーと照合されます ( $user
)。ユーザーが自分以外の誰かを編集しようとすると、チェックは失敗します。
これは非常に基本的な概要です。お役に立てば幸いです。