私はこれを行う方法について完全に完全に迷っています。私には、管理者、スタッフ、寄付者の 3 つの役割があります。私の問題は、許可されていないユーザーが URL からアクションにアクセスしようとすると、アクセス許可と適切なリダイレクトで (とにかく私にとって) 本当に混乱することです。
私の UsersController には、次のアクションがあります
- admin_index
- admin_add
- admin_edit
- admin_view
- admin_delete
接頭辞のないアクション
- ログインする
- ログアウト
- 見る
- 追加
- 編集
管理者は、ログインとログアウトだけでなく、管理者がプレフィックスされたすべてのアクションにアクセスできる必要がありますが、スタッフと寄付者は後者の 5 にのみアクセスできる必要があります。また、すべてのユーザーが同じログイン フォームを使用していることにも注意してください。
私の AppControlles のコンポーネントには、次のものがあります。
'Auth' => array(
'loginRedirect' => array(
'controller' => 'donors',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'users',
'action' => 'login'
),
'authorize' => array('Controller')
)
ただし、私のログイン アクションでは、ユーザー ロールが loginRedirect を適宜変更するかどうかを確認します。
if($this->request->is('post')){
if($this->Auth->login()){
switch($this->Auth->user('role')){
case 'admin':
$this->Auth->loginRedirect = array('controller'=>'users','action'=>'admin_index','prefix'=>'admin','admin'=>true);
break;
case 'donor':
...
break;
case .....
}
}
}
質問 1 現在、ドナーの役割を持つ現在のユーザーがログインし、アクセスしようとすると、単に ではなく にlocalhost/sitename/admin/users/add
リダイレクトされます。では、管理者のプレフィックスを削除するにはどうすればよいですか?admin/donors
/donors
質問 2 また、$this->Auth->allow() の仕組みが完全には理解できません。donersController で、役割に応じてコントローラ アクションへのアクセスを制御したい場合、どうすればよいですか? したがって、たとえば、donorsController に「削除」アクションがある場合、ドナー ユーザーが削除アクションにアクセスすることを拒否しながら、スタッフ ユーザーを許可するにはどうすればよいでしょうか。beforeFilter が解決策だと思いますが、その方法が見つかりません! ポインタはありますか?ありがとう