2024-09-19 11:32:39 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace admin\controllers;
|
|
|
|
|
|
|
|
|
|
|
|
use admin\components\BaseAdminController;
|
2024-12-19 19:20:27 +08:00
|
|
|
|
use admin\models\Admin;
|
2024-09-19 11:32:39 +08:00
|
|
|
|
use admin\models\Menu;
|
|
|
|
|
|
use common\enums\UserRoleEnum;
|
|
|
|
|
|
use common\helpers\ArrayHelper;
|
2024-12-19 19:20:27 +08:00
|
|
|
|
use common\models\oldDb\SubAccountMenu;
|
|
|
|
|
|
use common\modelsgii\oldDb\RoleMenu;
|
2024-09-19 11:32:39 +08:00
|
|
|
|
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
|
|
|
|
|
|
// ]);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
}
|