Role.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. $id = $this->request->param('id',0);
  54. $menuId = $params['menu_id'] ?? [];
  55. $is_exists = RoleModel::where('name', $params['name'])->where('id', '<>', $id)->find();
  56. if ($is_exists) {
  57. return $this->error('角色名称不可重复');
  58. }
  59. unset($params['menu_id']);
  60. if ($id) {
  61. //删除当前角色的菜单
  62. RoleMenu::where(['role_id' => $id])->delete();
  63. RoleModel::where('id', $id)->update($params);
  64. $role_id = $id;
  65. //删除角色权限的缓存
  66. Cache::delete('role_menu_'.$role_id);
  67. } else {
  68. $role = RoleModel::create($params);
  69. $role_id = $role->id;
  70. }
  71. //添加角色的权限
  72. $data = [];
  73. foreach ($menuId as $item) {
  74. if (empty($item)) {
  75. continue;
  76. }
  77. $data[] = [
  78. 'role_id' => $role_id,
  79. 'menu_id' => $item,
  80. ];
  81. }
  82. RoleMenu::insertAll($data);
  83. DB::commit();
  84. } catch (Exception $e) {
  85. DB::rollBack();
  86. return $this->error($e->getMessage());
  87. }
  88. return $this->success();
  89. }
  90. //删除
  91. public function delete()
  92. {
  93. try {
  94. $params = (new RoleValidate())->goCheck('id');
  95. //校验角色是否绑定管理员
  96. $count = Admin::where('role_id', $params['id'])->count();
  97. if($count > 0){
  98. return $this->error('该角色下有管理员,不能删除');
  99. }
  100. RoleModel::where('id', $params['id'])->delete();
  101. //删除角色权限的缓存
  102. Cache::delete('role_menu_'.$params['id']);
  103. } catch (Exception $e) {
  104. return $this->error($e->getMessage());
  105. }
  106. return $this->success();
  107. }
  108. //查看详情
  109. public function info()
  110. {
  111. try {
  112. $params = (new RoleValidate())->goCheck('id');
  113. $role = RoleModel::where('id', $params['id'])->find();
  114. if(empty($role)){
  115. return $this->error('角色不存在');
  116. }
  117. //获取角色的菜单
  118. $role->menu = RoleMenu::where('role_id', $params['id'])->column('menu_id');
  119. } catch (Exception $e) {
  120. return $this->error($e->getMessage());
  121. }
  122. return $this->success($role);
  123. }
  124. }