我有一个小问题,不是我的控制器。我希望用户只能在某些页面内访问,而在更多页面中访问最小用户。
我有一个名为 UsersController 的控制器这是它之前的过滤方法
public function beforeFilter () {
parent::beforeFilter(); // chiamo anche il callback beforeFilter dal parent per ottenere un'autorizzazione per l'utente loggato da tutte le viste $this->Auth->allow('index','view'); per tutti i Model
$views = array ('login','register','activate');
if ($this->Session->read('is_logged')) {
$views = array_merge ($views, array ('login','logout', 'change_password'));
if ($user_type == 'admin') {
$views = array_merge ($views, array ('add','delete','edit','create','index'));
}
}
$this->Auth->allow($views);
}
在此功能中,访客可以进入内部登录,注册和激活。
登录的用户可以访问登录内部。注销并change_password,管理其他页面更多。
但这行不通。例如,记录的用户可以在索引视图中访问或添加视图。
为什么会这样?
这是我之前在appController中的过滤器:
public function beforeFilter () {
$this->setReleaseData();
$this->checkUserStatus();
$this->updateTimezone();
$this->setRedirect();
if($this->Session->read('is_logged')){
$auth_user = $this->Auth->user();
$this->set('user_type', $auth_user['group']);
}
}
如何正确管理进入页面的权限?
谢谢
我看到您没有使用授权处理程序,因此您必须手动拒绝对操作的访问
$this->Auth->deny(array('index', 'add', 'edit', 'etc'));
编辑
我实际上会从拒绝访问所有内容开始,在您的之前过滤器(应用程序控制器)
$this->Auth->deny();
然后在你特定控制器的 beforeFilter() 中
if ($user_type == 'admin') {
$this->Auth->allow('actionThatYouWantToGrantAccess');
}
我会再研究一下身份验证控制器。 尝试使用管理员路由(在应用程序/配置/核心.php中打开)以及 $this->Auth->allow(),后者可以在 AppController 中默认设置 beforeFilter(.php然后在每个控制器的 beforeFilter 中设置。
/**
* @var mixed[mixed]
*/
public $components = array(
'Auth' => array(
'autoRedirect' => false,
'loginRedirect' => array(
'admin' => true,
'controller' => 'homes',
'action' => 'index',
),
'loginAction' => array(
'controller' => 'users',
'action' => 'login',
'admin' => false,
'plugin' => false,
),
'authenticate' => array(
'Form',
),
),
'Session',
'Cookie',
);
/**
* Before Filter callback
*/
public function beforeFilter() {
// Allow public views
$this->Auth->allow('index', 'view', 'display');
}