AdminUser.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <?php namespace App\Http\Controllers\Admin;
  2. use App\Http\Requests\Admin\AdminUser as Request;
  3. use App\Models\AdminUser as Model;
  4. use App\Models\AdminRule;
  5. use App\Models\Business;
  6. use App\Models\Company;
  7. use Illuminate\Support\Facades\DB;
  8. /**
  9. * 系统用户
  10. *
  11. * @author 刘相欣
  12. *
  13. */
  14. class AdminUser extends Auth{
  15. protected function _initialize(){
  16. parent::_initialize();
  17. $this->assign('breadcrumb1','用户管理');
  18. $this->assign('breadcrumb2','后台管理员');
  19. }
  20. /**
  21. * 列表页
  22. *
  23. * */
  24. public function index(Model $Model){
  25. $mp = [];
  26. $session = session('userRule');
  27. if ($session){
  28. $mp[] = ['admin_rule.company_id','=',$session['company_id']];
  29. if ($session['business_id']){
  30. $mp[] = ['admin_rule.business_id','=',$session['business_id']];
  31. }
  32. }
  33. if(!in_array(admin('uid'), explode(',', config('administrator')))){
  34. $mp['admin_rule.type'] = 1;
  35. }
  36. // 查询系统用户
  37. $list = $Model::query();
  38. if($mp) $list->join('admin_rule','admin_rule.admin_uid','=','admin.uid');
  39. $list = $list->where($mp)
  40. ->orderByDesc('admin.uid')
  41. ->paginate(config('page_num',10));
  42. // 循环处理
  43. foreach ($list as $key => $value) {
  44. // 获取分组名
  45. $group = DB::table('auth_group')
  46. ->join('auth_group_access','auth_group_access.group_id','=','auth_group.id')
  47. ->where([['auth_group_access.user_uid','=',$value['uid']]])
  48. ->pluck('auth_group.title')->toArray();
  49. if (in_array($value['uid'],explode(',',config('administrator')))) $group[] = '超管';
  50. // 切成字符串
  51. $value['title'] = implode('、', $group);
  52. //获取用户角色
  53. $rule = DB::table('admin_rule')->where('admin_uid',$value['uid'])->first();
  54. $rule_title = '';
  55. if ($rule){
  56. switch ($rule['menu_type']){
  57. case 1:
  58. $rule_title = '商户';
  59. break;
  60. case 2:
  61. $rule_title = '店铺';
  62. break;
  63. }
  64. if ($rule['menu_type'] == 1){
  65. if ($rule['data_type'] == 1){
  66. $rule_title = '商户普通员工';
  67. }elseif ($rule['data_type'] == 2){
  68. $rule_title = '商户代表';
  69. }
  70. }elseif ($rule['menu_type'] == 2){
  71. if ($rule['data_type'] == 1){
  72. $rule_title = '店铺普通员工';
  73. }elseif ($rule['data_type'] == 2){
  74. $rule_title = '店铺推广员';
  75. }
  76. }
  77. }
  78. $value['rule_title'] = $rule_title;
  79. $value['business_name'] = '';
  80. if ($value['business_id']){
  81. $value['business_name'] = Business::query()->where('id', $value['business_id'])->value('name');
  82. }
  83. $value['company_name'] = Company::query()->where('id', $value['company_id'])->value('name');
  84. // 重组
  85. $list[$key] = $value;
  86. }
  87. // 分配数据
  88. $this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
  89. $this->assign('list',$list);
  90. // 加载模板
  91. return $this->fetch();
  92. }
  93. /**
  94. * 添加
  95. *
  96. * */
  97. public function add(Request $request,Model $Model,AdminRule $AdminRule){
  98. // 当前登录用户角色数据
  99. $session = session('userRule') ? session('userRule') : ['menu_type'=>0,'company_id'=>0,'business_id'=>0];
  100. if( request()->isMethod('post') ){
  101. // 验证参数
  102. $request->scene('add')->validate();
  103. // 接收数据
  104. $data['username'] = request('username','');
  105. $data['phone'] = request('phone','');
  106. $data['password'] = request('password','');
  107. $data['password'] = md5($data['password']);
  108. $dataType = request('data_type',1);
  109. // 角色数据
  110. $ruleData = ['menu_type'=>1,'data_type'=>$dataType,'type'=>1,'company_id'=>1,'business_id'=>0];
  111. // 修改数据
  112. if( $session['menu_type'] ) $ruleData['menu_type'] = $session['menu_type'];
  113. if( $session['company_id'] ) $ruleData['company_id'] = $session['company_id'];
  114. if( $session['business_id'] ) $ruleData['business_id'] = $session['business_id'];
  115. // 所属权限组
  116. $groups = (array) request('groups',[]);
  117. // 开启事务
  118. DB::beginTransaction();
  119. // 写入数据表
  120. $uid = $Model->add($data);
  121. // 如果操作失败
  122. if( !$uid ) {
  123. // 回滚事务
  124. DB::rollBack();
  125. // 告知错误
  126. return json_send(['code'=>'error','msg'=>'新增失败']);
  127. }
  128. // 权限组
  129. $access = [];
  130. // 循环数据
  131. foreach ( $groups as $group_id) {
  132. // 追加数据
  133. $access[] = ['group_id'=>$group_id,'user_uid'=>$uid];
  134. }
  135. // 写入用户权限组
  136. $result = DB::table('auth_group_access')->insert($access);
  137. // 如果操作失败
  138. if( !$result ) {
  139. // 回滚事务
  140. DB::rollBack();
  141. // 告知错误
  142. return json_send(['code'=>'error','msg'=>'权限分配失败']);
  143. }
  144. //写入用户角色表
  145. $ruleData['admin_uid'] = $uid;
  146. $ruleUid = $AdminRule->add($ruleData);
  147. // 如果操作失败
  148. if( !$ruleUid ){
  149. // 回滚事务
  150. DB::rollBack();
  151. return json_send(['code'=>'error','msg'=>'新增管理员角色失败']);
  152. }
  153. // 提交事务
  154. DB::commit();
  155. // 记录行为
  156. $this->addAdminHistory(admin('uid'),$Model->getTable(),$uid,1,[],$data);
  157. // 告知结果
  158. return json_send(['code'=>'success','msg'=>'新增成功','action'=>'add']);
  159. }
  160. $whereGroup = [];
  161. // 如果不是超管 查询当前用户所属组
  162. $administrator = explode(',', config('administrator'));
  163. /*if(!in_array(admin('uid'),$administrator)){
  164. //用户所属组
  165. $gsGroup = DB::table('auth_group_access')->where(['user_uid'=>admin('uid')])->pluck('group_id')->toArray();
  166. //用户所属组 上级
  167. $upGroup = DB::table('auth_group')->whereIn('id',$gsGroup)->pluck('group_pid')->toArray();
  168. //用户所属组的下级
  169. $groupLower = DB::table('auth_group')->whereIn('group_pid',$gsGroup)->pluck('id')->toArray();
  170. //var_dump($groupLower);
  171. $whereGroup = array_merge($upGroup,$gsGroup,$groupLower);
  172. }*/
  173. $where = [];
  174. if(!in_array(admin('uid'),$administrator)){
  175. if($session && $session['menu_type'] ) $where['menu_type'] = $session['menu_type'];
  176. if($session && $session['company_id'] ) $where['company_id'] = $session['company_id'];
  177. if($session && $session['business_id'] ) $where['business_id'] = $session['business_id'];
  178. $where['type'] = 1;
  179. }
  180. // 查询用户组
  181. $query = DB::table('auth_group');
  182. if($where) $query->where($where);
  183. $group = $query->whereNotIn('id',explode(',',config('CUSTOM_GROUP')))->select(['id','title'])->get()->toArray();
  184. // 错误告知
  185. if( !$group ) $this->error('请先添加用户组');
  186. // 分配数据
  187. $this->assign('group',$group);
  188. $this->assign('crumbs','新增');
  189. // 加载模板
  190. return $this->fetch();
  191. }
  192. /**
  193. * 修改
  194. *
  195. * */
  196. public function edit(Request $request,Model $Model,AdminRule $AdminRule){
  197. // 接收参数
  198. $uid = request('uid',0);
  199. // 查询用户
  200. $oldData = $Model
  201. ->join('admin_rule','admin_rule.admin_uid','=','admin.uid')
  202. ->where(['uid'=>$uid])
  203. ->select('admin.*','admin_rule.data_type','admin_rule.menu_type')
  204. ->first();
  205. // 当前登录用户角色数据
  206. $session = session('userRule') ? session('userRule') : ['menu_type'=>0,'company_id'=>0,'business_id'=>0];
  207. if(request()->isMethod('post')){
  208. // 验证参数
  209. $request->scene('edit')->validate();
  210. // 接收数据
  211. $data['username'] = request('username','');
  212. $data['phone'] = request('phone','');
  213. $dataType = request('data_type',1);
  214. // 角色数据
  215. $ruleData = $AdminRule::query()->where([['admin_uid','=',$uid]])->first(['id','admin_uid','menu_type','data_type','type','company_id','business_id']);
  216. // 如果不存在的话
  217. $ruleData = $ruleData ? $ruleData->toArray() : ['admin_uid'=>$uid,'menu_type'=>1,'data_type'=>$dataType,'type'=>1,'company_id'=>1,'business_id'=>0];
  218. // 修改数据
  219. if( $session['menu_type'] ) $ruleData['menu_type'] = $session['menu_type'];
  220. if( $session['company_id'] ) $ruleData['company_id'] = $session['company_id'];
  221. if( $session['business_id'] ) $ruleData['business_id'] = $session['business_id'];
  222. // 密码
  223. $password = request('password','');
  224. // 所属权限组
  225. $groups = (array) request('groups',[]);
  226. // 如果用户不存在
  227. if( !$oldData ) return json_send(['code'=>'error','msg'=>'用户不存在']);
  228. // 不能修改超管的账号
  229. if( $oldData['username'] == config('administrator') ) return json_send(['code'=>'error','msg'=>'这是被禁止的操作']);
  230. // 如果要修密码
  231. if( $password ) $data['password'] = md5($password);
  232. // 开启事务
  233. DB::beginTransaction();
  234. // 写入数据表
  235. $result = $Model->edit($uid,$data);
  236. // 如果操作失败
  237. if( !$result ) {
  238. // 回滚事务
  239. DB::rollBack();
  240. // 告知错误
  241. return json_send(['code'=>'error','msg'=>'新增失败']);
  242. }
  243. // 清空权限组
  244. DB::table('auth_group_access')->where([['user_uid','=',$uid]])->delete();
  245. // 权限组
  246. $access = [];
  247. // 循环数据
  248. foreach ( $groups as $group_id) {
  249. // 追加数据
  250. $access[] = ['group_id'=>$group_id,'user_uid'=>$uid];
  251. }
  252. // 写入用户权限组
  253. $result = DB::table('auth_group_access')->insert($access);
  254. // 如果操作失败
  255. if( !$result ) {
  256. // 回滚事务
  257. DB::rollBack();
  258. // 告知错误
  259. return json_send(['code'=>'error','msg'=>'权限分配失败']);
  260. }
  261. // 写入数据表
  262. $result = empty($ruleData['id']) ? $AdminRule->add($ruleData) : $AdminRule->edit($ruleData['id'],$ruleData);
  263. // 如果操作失败
  264. if( !$result ) {
  265. // 回滚事务
  266. DB::rollBack();
  267. // 告知错误
  268. return json_send(['code'=>'error','msg'=>'修改失败']);
  269. }
  270. // 提交事务
  271. DB::commit();
  272. // 记录行为
  273. $this->addAdminHistory(admin('uid'),$Model->getTable(),$uid,2,$oldData,$data);
  274. // 告知结果
  275. return json_send(['code'=>'success','msg'=>'修改成功','action'=>'edit']);
  276. }
  277. //$whereGroup = [];
  278. // 如果不是超管 查询当前用户所属组
  279. $administrator = explode(',', config('administrator'));
  280. /*if(!in_array(admin('uid'),$administrator)){
  281. // 用户所属组
  282. $gsGroup = DB::table('auth_group_access')->where(['user_uid'=>admin('uid')])->pluck('group_id')->toArray();
  283. // 用户所属组 上级
  284. $upGroup = DB::table('auth_group')->whereIn('id',$gsGroup)->pluck('group_pid')->toArray();
  285. // 用户所属组的下级
  286. $groupLower = DB::table('auth_group')->whereIn('group_pid',$gsGroup)->pluck('id')->toArray();
  287. // 下属组
  288. $whereGroup = array_merge($upGroup,$gsGroup,$groupLower);
  289. }*/
  290. $where = [];
  291. if(!in_array(admin('uid'),$administrator)){
  292. if($session && $session['menu_type'] ) $where['menu_type'] = $session['menu_type'];
  293. if($session && $session['company_id'] ) $where['company_id'] = $session['company_id'];
  294. if($session && $session['business_id'] ) $where['business_id'] = $session['business_id'];
  295. $where['type'] = 1;
  296. }
  297. // 查询用户组
  298. $query = DB::table('auth_group');
  299. if($where) $query->where($where);
  300. // 获取
  301. $group = $query->whereNotIn('id',explode(',',config('CUSTOM_GROUP')))->select(['id','title'])->get()->toArray();
  302. // 错误告知
  303. if( !$group ) return $this->error('请先添加用户组');
  304. // 错误告知
  305. if( !$oldData ) return $this->error('查无数据');
  306. // 查询用户的用户组
  307. $oldData['group'] = DB::table('auth_group_access')->where([['user_uid','=',$uid]])->pluck('group_id')->toArray();
  308. // 分配数据
  309. $this->assign('oldData',$oldData);
  310. $this->assign('group',$group);
  311. $this->assign('crumbs','修改');
  312. // 加载模板
  313. return $this->fetch();
  314. }
  315. /**
  316. * 操作历史
  317. *
  318. * */
  319. public function history(){
  320. // 查询
  321. $list = DB::table('user_action')->orderByDesc('ua_id')->paginate(config('page_num',10))->appends(request()->all());
  322. // 分配数据
  323. $this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
  324. $this->assign('breadcrumb2','操作记录');
  325. $this->assign('list',$list);
  326. // 加载模板
  327. return $this->fetch();
  328. }
  329. /**
  330. * 修改状态
  331. *
  332. * */
  333. public function set_status(Request $request,Model $Model){
  334. // 验证参数
  335. $request->scene('set_status')->validate();
  336. // 设置状态
  337. $id = request('uid',0);
  338. $status = request('status',0);
  339. // 查询用户
  340. $oldData = $Model->where(['uid'=>$id])->first();
  341. // 如果用户不存在
  342. if( !$oldData ) return json_send(['code'=>'error','msg'=>'用户不存在']);
  343. // 执行修改
  344. $result = $Model->edit($id,['status'=>$status]);
  345. // 提示新增失败
  346. if( !$result ) return json_send(['code'=>'error','msg'=>'设置失败']);
  347. // 记录行为
  348. $this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,['status'=>$status]);
  349. // 告知结果
  350. return json_send(['code'=>'success','msg'=>'设置成功','path'=>'']);
  351. }
  352. }