Role.php 4.0 KB

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