392 lines
13 KiB
PHP
392 lines
13 KiB
PHP
<?php
|
||
|
||
namespace admin\controllers;
|
||
|
||
use admin\components\BaseAdminController;
|
||
use admin\models\Admin;
|
||
use admin\models\Menu;
|
||
use common\enums\UserRoleEnum;
|
||
use common\helpers\ArrayHelper;
|
||
use common\models\oldDb\SubAccountMenu;
|
||
use common\modelsgii\oldDb\RoleMenu;
|
||
use Yii;
|
||
use yii\base\Exception;
|
||
|
||
/**
|
||
* 后台用户控制器
|
||
* @author longfei <phphome@qq.com>
|
||
*/
|
||
class AdminController extends BaseAdminController
|
||
{
|
||
public $modelClass = Admin::class;
|
||
public $roles;
|
||
public $login_role;
|
||
|
||
/**
|
||
* ---------------------------------------
|
||
* 构造方法
|
||
* ---------------------------------------
|
||
*/
|
||
public function init()
|
||
{
|
||
parent::init();
|
||
}
|
||
//
|
||
//public function beforeAction($action)
|
||
//{
|
||
// $user_id = Yii::$app->user->identity->getId();
|
||
// $login_role = Yii::$app->authManager->getRolesByUser($user_id);
|
||
// $this->login_role = array_keys($login_role)[0];
|
||
//
|
||
// if(Yii::$app->params['admin'] == Yii::$app->user->id){
|
||
// $roles = Yii::$app->authManager->getRoles();
|
||
// }else{
|
||
// $roles = Yii::$app->authManager->getChildRoles($this->login_role);
|
||
// unset($roles[$this->login_role]);
|
||
// }
|
||
// $this->roles = $roles;
|
||
//
|
||
// $uid = Yii::$app->request->get('uid');
|
||
// if($uid){
|
||
// $assign = Yii::$app->authManager->getAssignments($uid);
|
||
// $role = array_keys($assign)[0];
|
||
// //管理员只能管理下级管理员,不能管理同级和上级管理员
|
||
// if(!in_array($role,array_keys($roles))){
|
||
// throw new ForbiddenHttpException(Yii::t('yii', 'You are not allowed to perform this action.'));
|
||
// }
|
||
// }
|
||
// return parent::beforeAction($action); // TODO: Change the autogenerated stub
|
||
//}
|
||
|
||
|
||
/**
|
||
* ---------------------------------------
|
||
* 后台用户列表
|
||
* @doc-param int type 1内部账号2客户账号
|
||
* @doc-param string search 搜索 / optional
|
||
* @doc-return @List{is_sub-int-是否子账号0否1是}
|
||
* ---------------------------------------
|
||
*/
|
||
public function actionIndex()
|
||
{
|
||
/* 添加当前位置到cookie供后续操作调用 */
|
||
// $this->setForward();
|
||
$admin = Yii::$app->user->identity;
|
||
$get = Yii::$app->request->get();
|
||
$this->requestValidate($get,[
|
||
['type','required','message'=>'类型不能为空']
|
||
]);
|
||
$query = Admin::find();
|
||
switch ($get['type']){
|
||
case 1:
|
||
$query->andWhere(['<>','role',UserRoleEnum::STORE_ADMIN]);
|
||
break;
|
||
case 2:
|
||
$query->andWhere(['role'=>UserRoleEnum::STORE_ADMIN]);
|
||
break;
|
||
default:
|
||
throw new \yii\db\Exception('参数错误');
|
||
}
|
||
|
||
if (UserRoleEnum::STORE_ADMIN == $admin->role) {
|
||
$query->andWhere(['role' => UserRoleEnum::STORE_ADMIN, 'store_id' => $admin->store_id]);
|
||
}
|
||
if (!empty($get['search'])){
|
||
$query->andWhere([
|
||
'or',
|
||
['mobile'=>$get['search']],
|
||
['like','username',$get['search']]
|
||
]);
|
||
}
|
||
|
||
$this->field = [
|
||
Admin::class => [
|
||
'uid', 'username', 'password', 'mobile', 'store_id', 'store' => 'store.name', 'role_id' => 'role', 'role' => 'roles.name', 'is_sub','code','province_id','city_id',
|
||
'province'=>'province.name',
|
||
'city'=>'city.name',
|
||
'status'
|
||
]
|
||
];
|
||
return $this->create($query, $get);
|
||
}
|
||
|
||
/**
|
||
* ---------------------------------------
|
||
* 添加
|
||
* ---------------------------------------
|
||
*/
|
||
public function actionAdd()
|
||
{
|
||
|
||
$model = new Admin();
|
||
|
||
if (Yii::$app->request->isPost) {
|
||
/* 表单验证 */
|
||
$data = Yii::$app->request->post('Admin');
|
||
$data['reg_time'] = time();
|
||
$data['reg_ip'] = ip2long(Yii::$app->request->getUserIP());
|
||
$data['last_login_time'] = 0;
|
||
$data['last_login_ip'] = ip2long('127.0.0.1');
|
||
$data['update_time'] = 0;
|
||
/* 表单数据加载和验证,具体验证规则在模型rule中配置 */
|
||
/* 密码单独验证,否则setPassword后密码肯定符合rule */
|
||
if (empty($data['password']) || strlen($data['password']) < 6) {
|
||
$this->error('密码为空或小于6字符');
|
||
}
|
||
$model->setAttributes($data);
|
||
$model->generateAuthKey();
|
||
$model->setPassword($data['password']);
|
||
if (!isset($data['role']) || !$data['role']) {
|
||
$this->error('未选择任何角色');
|
||
}
|
||
/* 保存用户数据到数据库 */
|
||
if ($model->save()) {
|
||
|
||
/* 先删除 用户组-用户 记录 */
|
||
Yii::$app->authManager->revokeAll($model->uid);
|
||
/* 再添加记录 */
|
||
$role = Yii::$app->authManager->getRole($data['role']);
|
||
Yii::$app->authManager->assign($role, $model->uid);
|
||
|
||
$this->success('操作成功', $this->getForward());
|
||
} else {
|
||
$this->error('操作错误:' . array_values($model->getFirstErrors())[0]);
|
||
}
|
||
}
|
||
|
||
//获取下属角色
|
||
$roles = array_map(function ($n) {
|
||
return $n->name;
|
||
}, $this->roles);
|
||
|
||
$model->role = reset($roles);
|
||
$model->status = 1;
|
||
|
||
return $this->render('add', [
|
||
'model' => $model,
|
||
'roles' => $roles
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* ---------------------------------------
|
||
* 编辑
|
||
* ---------------------------------------
|
||
*/
|
||
public function actionEdit($uid)
|
||
{
|
||
$model = Admin::findOne($uid);
|
||
|
||
if (Yii::$app->request->isPost) {
|
||
/* 表单验证 */
|
||
$data = Yii::$app->request->post('Admin');
|
||
$data['update_time'] = time();
|
||
/* 如果设置密码则重置密码,否则不修改密码 */
|
||
if (!empty($data['password'])) {
|
||
$model->generateAuthKey();
|
||
$model->setPassword($data['password']);
|
||
}
|
||
unset($data['password']);
|
||
if (!isset($data['role']) || !$data['role']) {
|
||
$this->error('未选择任何角色');
|
||
}
|
||
|
||
$model->setAttributes($data);
|
||
/* 保存用户数据到数据库 */
|
||
if ($model->save()) {
|
||
|
||
/* 先删除 用户组-用户 记录 */
|
||
Yii::$app->authManager->revokeAll($model->uid);
|
||
/* 再添加记录 */
|
||
$role = Yii::$app->authManager->getRole($data['role']);
|
||
Yii::$app->authManager->assign($role, $model->uid);
|
||
|
||
$this->success('操作成功', $this->getForward());
|
||
} else {
|
||
$this->error('操作错误');
|
||
}
|
||
}
|
||
|
||
$roles = array_map(function ($n) {
|
||
return $n->name;
|
||
}, $this->roles);
|
||
|
||
$assign = Yii::$app->authManager->getAssignments($model->uid);
|
||
$model->role = array_keys($assign)[0];
|
||
$model->password = '';
|
||
return $this->render('edit', [
|
||
'model' => $model,
|
||
'roles' => $roles
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* ---------------------------------------
|
||
* 删除
|
||
* ---------------------------------------
|
||
*/
|
||
public function actionDelete()
|
||
{
|
||
$ids = Yii::$app->request->param('uid', 0);
|
||
$ids = implode(',', array_unique((array)$ids));
|
||
|
||
if (empty($ids)) {
|
||
$this->error('请选择要操作的数据!');
|
||
}
|
||
|
||
/* 不能删除超级管理员 */
|
||
if (in_array(Yii::$app->params['admin'], explode(',', $ids))) {
|
||
$this->error('不能删除超级管理员!');
|
||
}
|
||
|
||
$_where = 'uid in(' . $ids . ')';
|
||
if (Admin::deleteAll($_where)) {
|
||
foreach (explode(',', $ids) as $uid) {
|
||
Yii::$app->authManager->revokeAll($uid);
|
||
}
|
||
|
||
$this->success('删除成功', $this->getForward());
|
||
} else {
|
||
$this->error('删除失败!');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 个人信息
|
||
*/
|
||
public function actionPersonal()
|
||
{
|
||
$user_id = Yii::$app->user->identity->getId();
|
||
$model = Admin::findOne($user_id);
|
||
|
||
if (Yii::$app->request->isPost) {
|
||
/* 表单验证 */
|
||
$data = Yii::$app->request->post('Admin');
|
||
$data['update_time'] = time();
|
||
/* 如果设置密码则重置密码,否则不修改密码 */
|
||
if (!empty($data['password'])) {
|
||
$model->generateAuthKey();
|
||
$model->setPassword($data['password']);
|
||
}
|
||
unset($data['password']);
|
||
$model->setAttributes($data);
|
||
/* 保存用户数据到数据库 */
|
||
if ($model->save()) {
|
||
$this->success('操作成功', $this->getForward());
|
||
} else {
|
||
$this->error('操作错误');
|
||
}
|
||
}
|
||
|
||
$model->password = '';
|
||
return $this->render('personal', [
|
||
'model' => $model
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 个人信息
|
||
*/
|
||
public function actionEditPass()
|
||
{
|
||
$user_id = Yii::$app->user->identity->getId();
|
||
$model = Admin::findOne($user_id);
|
||
|
||
/* 表单验证 */
|
||
$data = Yii::$app->request->post();
|
||
$data['update_time'] = time();
|
||
/* 如果设置密码则重置密码,否则不修改密码 */
|
||
if (isset($data['password']) && !empty($data['password'])) {
|
||
if (strlen($data['password']) < 6) {
|
||
throw new Exception('密码小于6字符');
|
||
}
|
||
$model->generateAuthKey();
|
||
$model->setPassword($data['password']);
|
||
}
|
||
unset($data['password']);
|
||
$model->setAttributes($data);
|
||
/* 保存用户数据到数据库 */
|
||
$model->saveOrFail();
|
||
}
|
||
|
||
private function createMenuNode($name, $icon, $url)
|
||
{
|
||
return ['app' => 'index', 'name' => $name, 'title' => null, 'icon' => $icon, 'url' => $url, 'route' => '', 'topic' => '', 'hidden' => false, 'target' => null];
|
||
}
|
||
|
||
public function actionMyMenu()
|
||
{
|
||
$role = Yii::$app->user->identity->role;
|
||
//角色1为官方管理,2为市场专员,3为客服,4为供应商管理,5为业务员,6为门店管理
|
||
if ($role == 1) {
|
||
return ['list' => Yii::$app->params['menu']];
|
||
} else if ($role == 6) {
|
||
return ['list' => Yii::$app->params['store_menu']];
|
||
} else if ($role == 5) {
|
||
return ['list' => Yii::$app->params['agent_menu']];
|
||
} else if ($role == 4) {
|
||
return ['list' => Yii::$app->params['supplier_menu']];
|
||
}
|
||
}
|
||
|
||
public function actionMenu()
|
||
{
|
||
if (Yii::$app->user->identity->is_sub === 1) {
|
||
$userMenus = SubAccountMenu::findAll(['admin_id' => Yii::$app->user->identity->uid]);
|
||
} else {
|
||
$role = Yii::$app->user->identity->role;
|
||
$userMenus = RoleMenu::findAll(['role_id' => $role]);
|
||
}
|
||
|
||
$keys = ArrayHelper::getColumn($userMenus, 'menuUrl');
|
||
$menus = Menu::find()->where(['in', 'menuUrl', $keys])->orderBy(['sort' => SORT_ASC])->asArray()->all();
|
||
return ArrayHelper::itemsMerge($menus, 0, 'menuUrl', 'parentPath', 'children');
|
||
|
||
////当前用户menu
|
||
//return ['list'=> Yii::$app->params['menu']];
|
||
|
||
}
|
||
|
||
/**
|
||
* ---------------------------------------
|
||
* 用户授权
|
||
* ---------------------------------------
|
||
*/
|
||
// public function actionAuth($uid)
|
||
// {
|
||
// $auth = Yii::$app->authManager;
|
||
// /* 获取用户信息 */
|
||
// $model = Admin::findOne($uid);
|
||
//
|
||
// if (Yii::$app->request->isPost) {
|
||
// $data = Yii::$app->request->post();
|
||
// /* 用户权限组 */
|
||
// $item_name = $data['param'];
|
||
//
|
||
// /* 先删除 用户组-用户 记录 */
|
||
// $auth->revokeAll($uid);
|
||
// /* 再添加记录 */
|
||
// $role = $auth->getRole($item_name);
|
||
// $auth->assign($role, $uid);
|
||
//
|
||
// $this->success('授权成功!', $this->getForward());
|
||
//
|
||
// var_dump($data['param']);
|
||
// exit;
|
||
// }
|
||
//
|
||
// /* 获取所有权限组 */
|
||
// $roles = $auth->getRoles();
|
||
// /* 获取该用户的权限 */
|
||
// $group = array_keys($auth->getAssignments($uid));
|
||
// //var_dump($group);exit;
|
||
//
|
||
// return $this->render('auth', [
|
||
// 'model' => $model,
|
||
// 'roles' => $roles,
|
||
// 'group' => $group
|
||
// ]);
|
||
// }
|
||
|
||
}
|