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

392 lines
13 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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
// ]);
// }
}