Role.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. namespace app\admin\controller;
  3. use app\BaseController;
  4. use app\admin\model\Role as RoleModel;
  5. use app\admin\model\Admin;
  6. use app\admin\model\RoleMenu;
  7. use app\admin\model\User;
  8. use app\admin\validate\RoleValidate;
  9. use think\facade\Db;
  10. use think\facade\Cache;
  11. use Exception;
  12. class Role extends BaseController
  13. {
  14. /**
  15. * @api {get} /role/list 查看角色列表
  16. */
  17. public function list()
  18. {
  19. try {
  20. $params = $this->request->param();
  21. $query = new RoleModel();
  22. if (!empty($params['name'])) {
  23. $query = $query->where('name', 'like', '%'.$params['name'].'%');
  24. }
  25. $page = $params['page'] ?? 1;
  26. $limit = $params['limit'] ?? 15;
  27. $count = $query->count();
  28. $list = $query->order('id', 'desc')
  29. ->limit($limit)
  30. ->page($page)
  31. ->select();
  32. } catch (\Exception $e) {
  33. return $this->error($e->getMessage());
  34. }
  35. return $this->success(['count' => $count, 'list' => $list]);
  36. }
  37. /**
  38. * @api {post} /role/update 添加/修改
  39. * @apiGroup 角色
  40. * @apiVersion 1.0.0
  41. * @apiUse header
  42. * @apiUse lang
  43. *
  44. * 'id' => $params['id'],
  45. * @apiParam {Integer} id ID
  46. * @apiParam {String} name 名称
  47. * @apiParam {String} desc 描述
  48. */
  49. public function update()
  50. {
  51. DB::startTrans();
  52. try {
  53. $params = (new RoleValidate())->post()->goCheck('edit');
  54. $id = $this->request->param('id',0);
  55. $menuId = $params['menu_id'] ?? [];
  56. $is_exists = RoleModel::where('name', $params['name'])->where('id', '<>', $id)->find();
  57. if ($is_exists) {
  58. return $this->error('角色名称不可重复');
  59. }
  60. unset($params['menu_id']);
  61. if ($id) {
  62. //删除当前角色的菜单
  63. RoleMenu::where(['role_id' => $id])->delete();
  64. RoleModel::where('id', $id)->update($params);
  65. $role_id = $id;
  66. //同步角色头像到user表
  67. $admin_ids = Admin::where('role_id', $id)->column('id');
  68. if($admin_ids){
  69. User::where('role','>',0)->whereIn('uid', $admin_ids)->update(['avatar'=>$params['avatar']]);
  70. }
  71. //删除角色权限的缓存
  72. Cache::delete('role_menu_'.$role_id);
  73. } else {
  74. $role = RoleModel::create($params);
  75. $role_id = $role->id;
  76. }
  77. //添加角色的权限
  78. $data = [];
  79. foreach ($menuId as $item) {
  80. if (empty($item)) {
  81. continue;
  82. }
  83. $data[] = [
  84. 'role_id' => $role_id,
  85. 'menu_id' => $item,
  86. ];
  87. }
  88. RoleMenu::insertAll($data);
  89. DB::commit();
  90. } catch (Exception $e) {
  91. DB::rollBack();
  92. return $this->error($e->getMessage());
  93. }
  94. return $this->success();
  95. }
  96. //删除
  97. public function delete()
  98. {
  99. try {
  100. $params = (new RoleValidate())->goCheck('id');
  101. //校验角色是否绑定管理员
  102. $count = Admin::where('role_id', $params['id'])->count();
  103. if($count > 0){
  104. return $this->error('该角色下有管理员,不能删除');
  105. }
  106. RoleModel::where('id', $params['id'])->delete();
  107. //删除角色权限的缓存
  108. Cache::delete('role_menu_'.$params['id']);
  109. } catch (Exception $e) {
  110. return $this->error($e->getMessage());
  111. }
  112. return $this->success();
  113. }
  114. //查看详情
  115. public function info()
  116. {
  117. try {
  118. $params = (new RoleValidate())->goCheck('id');
  119. $role = RoleModel::where('id', $params['id'])->find();
  120. if(empty($role)){
  121. return $this->error('角色不存在');
  122. }
  123. //获取角色的菜单
  124. $role->menu = RoleMenu::where('role_id', $params['id'])->column('menu_id');
  125. } catch (Exception $e) {
  126. return $this->error($e->getMessage());
  127. }
  128. return $this->success($role);
  129. }
  130. }