CakePhp是Authorization,$ user值只有两个字段

时间:2014-10-16 21:13:24

标签: cakephp

我正在使用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。为什么我没有我的所有用户字段?有没有办法得到它们?

1 个答案:

答案 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);
}

CakeBook

你也可以使用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')
                                           )
                            );

此外,您可以验证数据库中是否有一个列,其中包含角色作为列名