【问题标题】:(CakePHP) isAuthorized related issue. Can anyone please take a look ?(CakePHP) isAuthorized 相关问题。任何人都可以看看吗?
【发布时间】:2013-05-06 01:24:58
【问题描述】:

我在数据库中有两个表,Admins 和 Users。管理员应该只打开有 9 个控制器的管理员面板。用户将看到有一个控制器名称“HomeController”的前端。

当用户登录时,他能够访问仅供管理员使用的控制器。当管理员登录时,他能够打开仅供用户使用的控制器。如何防止这种情况发生?

应用控制器:

class AppController extends Controller {

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Admin' => array(
                'userModel' => 'Admin',
                'fields' => array(
                    'username' => 'username',
                    'password' => 'password'
                    )
            ),
            'User' => array(
                'userModel' => 'User',
                'fields' => array(
                    'username' => 'username',
                    'password' => 'password'
                    )
            )
        )
    )
);

public function beforeFilter()
{

}  

}

TransactionsController:(由管理员访问)

public function beforeFilter()
{       
    $this->Auth->loginRedirect = array('controller' => 'items', 'action' => 'index');
    $this->Auth->logoutRedirect = array('controller' => 'admins', 'action' => 'login');
    $this->Auth->loginAction = array('controller' => 'admins', 'action' => 'login');

    // Basic setup
    $this->Auth->authenticate = array('Form');

    // Pass settings in
    $this->Auth->authenticate = array(
        'Form' => array('userModel' => 'Admin')
    );

}

public function isAuthorized($admin)
{
    if(isset($admin['Admin']['id']))
    {
        return true;
    }
    return false;
}

HomeController:(由用户访问)

public function beforeFilter()
{   
    $this->Auth->loginRedirect = array('controller' => 'home', 'action' => 'index');
    $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');

    // Basic setup
    $this->Auth->authenticate = array('Form');

    // Pass settings in
    $this->Auth->authenticate = array(
        'Form' => array('userModel' => 'User')
    );

    $this->Auth->allow('view', 'index', 'item', 'itemlist', 'search');
}

public function isAuthorized($user)
{
    if(isset($user['User']['id']))
    {
        return true;
    }
    return false;
}

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    如果你只有两个级别的身份验证,管理员和用户,你可以试试prefix routing

    URLS 是预定义的

    http://mysite.com/admin/transactions
    

    这将被路由到事务控制器,您将为每个管理员和用户添加前缀索引方法

    public function admin_index(){
    
    }
    
    public function user_index(){
        $this->redirect(array('controller' => 'home', 'action' => 'index'));
    }
    

    如果您有两个以上的用户组,请查看Access Control Lists

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2012-11-13
      相关资源
      最近更新 更多