我正在使用CakePHP 3创建一个电子商务网站
我需要创建一个允许管理员上传的管理页面 产品并可能查看一些KPI等。
Cake中是否有办法让用户(一般客户在网站上购物)和超级用户(或管理员)同时使用?我的Users表中有一个'is_admin'列,用于区分admin和user。我只需要在我的addProducts函数中使用这样的东西,或者有更好的方法吗?:
public function addProducts(){
$user = $this->Auth->user();
if($user['is_admin']) {
//allow access
} else {
//throw anauthorised exception
}
}
提前致谢
答案 0 :(得分:1)
您可以通过管理员和前端用户的不同网址进行管理。这可以通过路线和APP控制器进行管理。 我用于其中一个应用程序的内容如下:
在routes.php文件中
Router::prefix('admin', function ($routes) {
// All routes here will be prefixed with `/admin`
// And have the prefix => admin route element added.
$routes->fallbacks('DashedRoute');
$routes->connect('/', array('controller' => 'Users', 'action' => 'login'));
/* Here you can define all the routes for the admin */
});
Router::scope('/', function ($routes) {
$routes->connect('/', array('controller' => 'Users', 'action' => 'login', 'home'));
/* Here you can define all the routes for the frontend */
});
请注意管理员需要在所有/ src / Controller,/ src / Template中创建一个名为" Admin"在这些目录中,您可以使用我们在代码中使用的相同结构。
现在需要在/src/Controller/AppController.php中编写代码
public $prefix = '';
public function initialize()
{
$this->prefix = (!empty($this->request->params['prefix'])?$this->request->params['prefix']:'');
$this->set('prefix',$this->prefix);
if( !empty($this->prefix) && $this->prefix==='admin' )
{
$this->loadComponent('Auth', [
'loginAction' => [
'controller' => 'Users',
'action' => 'login',
'prefix'=>'admin'
],
'loginRedirect' => [
'controller' => 'Users',
'action' => 'index',
'prefix'=>'admin'
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login',
'prefix'=>'admin'
],
'authError' => 'Did you really think you are allowed to see that?',
'authenticate' => [
'Form' => [
'finder' => 'admin',
'fields' => ['username' => 'email', 'password' => 'password']
]
],
'storage' => ['className' => 'Session', 'key' => 'Auth.Admin']
]);
}
else
{
$this->loadComponent('Auth', [
'loginAction' => [
'controller' => 'Users',
'action' => 'login'
],
'loginRedirect' => [
'controller' => 'Users',
'action' => 'myaccount'
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login'
],
'authError' => 'Did you really think you are allowed to see that?',
'authenticate' => [
'Form' => [
'finder' => 'user',
'fields' => ['username' => 'email', 'password' => 'password']
]
],
'storage' => ['className' => 'Session', 'key' => 'Auth.User']
]);
}
}
在这里你可以看到我们使用不同的密钥存储Auth.User和Auth.Admin
对于查找程序,您需要在位于src \ Model \ Table \ UsersTable.php
的用户模型表中编写以下代码public function findAdmin(\Cake\ORM\Query $query, array $options)
{
$query
->select(array('Users.email', 'Users.password','Users.id','Users.role_id'))
->where(array('Users.role_id' => 1));
return $query;
}
public function findUser(\Cake\ORM\Query $query, array $options)
{
$query
->select(array('Users.email', 'Users.password','Users.id','Users.role_id'))
->where(array('Users.status' => 1,'Users.role_id' => 3));
return $query;
}
注意,这里我保留了role_id" 1"对于管理员和" 3"对于前端用户。
通过这种方式,即使您可以在同一浏览器中为两个用户类型设置两个用户类型的登录名。
希望这可以帮助您相应地设置结构。