Files
xk-api-yii/admin/controllers/AdminController.php

392 lines
13 KiB
PHP
Raw Normal View History

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
// ]);
// }
}