我正在使用Cakephp 2.5.5并且我坚持使用isAuthorized()函数。
这是我的功能:
function isAuthorized($user)
{
debug($user);
if (!isset($this->request->params['prefix']))
return (true);
else if (isset($user['role']) && $user['role'] == 'admin')
return (true);
return (false);
}
问题是$ user ['role']未定义,debug()的输出是:
array(
'User' => array(
'password' => '*****',
'username' => 'theUser'
))
我不明白什么是错的,我正在关注这本书和一个视频而我没有相同的结果T__T。为什么我没有我的所有用户字段?有没有办法得到它们?
答案 0 :(得分:0)
你有这个代码吗?
// app/Controller/AppController.php
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'posts', 'action' => 'index'),
'logoutRedirect' => array(
'controller' => 'pages',
'action' => 'display',
'home'
),
'authorize' => array('Controller') // Added this line
)
);
public function isAuthorized($user) {
// Admin can access every action
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
// Default deny
return false;
}
// app/Controller/PostsController.php
public function isAuthorized($user) {
// All registered users can add posts
if ($this->action === 'add') {
return true;
}
// The owner of a post can edit and delete it
if (in_array($this->action, array('edit', 'delete'))) {
$postId = (int) $this->request->params['pass'][0];
if ($this->Post->isOwnedBy($postId, $user['id'])) {
return true;
}
}
return parent::isAuthorized($user);
}
你也可以使用beforeFilter函数:
//在AppController中
public function isAuthorized($user)
{
// Sudo can access every action
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
// Default deny
return false;
}
//在其他控制器中
public function beforeFilter() {
parent::beforeFilter();
if ($this->Auth->user('role') === 'admin')
{
$this->Auth->allow('all');
}
else
{
//....
}
}
在这种情况下,您必须通过添加到控制器
来使用Auth组件 public $components = array(
'Auth' => array('loginRedirect' =>
array('controller' => '/', 'action' => 'home'),
'logoutRedirect' =>
array('controller' => 'users', 'action' => 'logout')
)
);
此外,您可以验证数据库中是否有一个列,其中包含角色作为列名