UserRole.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\controller;
  4. use app\BaseController;
  5. use app\model\UserRoleModel;
  6. use app\model\UserModel;
  7. use think\facade\Config;
  8. use think\facade\Request;
  9. use think\facade\Cookie;
  10. class UserRole extends BaseController
  11. {
  12. /**
  13. * 获取所有权限配置
  14. */
  15. public function getPermissions()
  16. {
  17. $loginInfo = checkUserLogin();
  18. if (!$loginInfo) {
  19. return json_error([], '请先登录');
  20. }
  21. if (!checkPermission($loginInfo, 'role', 'permissions')) {
  22. return json_error([], '没有查看权限配置的权限');
  23. }
  24. $permissions = Config::get('permission.permissions', []);
  25. return json_success($permissions, '获取权限配置成功');
  26. }
  27. /**
  28. * 获取角色列表
  29. */
  30. public function list()
  31. {
  32. $loginInfo = checkUserLogin();
  33. if (!$loginInfo) {
  34. return json_error([], '请先登录');
  35. }
  36. if (!checkPermission($loginInfo, 'role', 'list')) {
  37. return json_error([], '没有查看角色列表的权限');
  38. }
  39. $list = UserRoleModel::getRoleList($loginInfo['merchant_id']);
  40. return json_success([
  41. 'list' => $list,
  42. 'total' => count($list)
  43. ], '获取角色列表成功');
  44. }
  45. /**
  46. * 获取角色详情
  47. */
  48. public function detail()
  49. {
  50. $loginInfo = checkUserLogin();
  51. if (!$loginInfo) {
  52. return json_error([], '请先登录');
  53. }
  54. if (!checkPermission($loginInfo, 'role', 'detail')) {
  55. return json_error([], '没有查看角色详情的权限');
  56. }
  57. $id = $this->request->param('id', 0, 'intval');
  58. if (!$id) {
  59. return json_error([], '角色ID不能为空');
  60. }
  61. $role = UserRoleModel::getRoleById($id, $loginInfo['merchant_id']);
  62. if (!$role) {
  63. return json_error([], '角色不存在');
  64. }
  65. return json_success($role, '获取角色详情成功');
  66. }
  67. /**
  68. * 创建角色
  69. */
  70. public function create()
  71. {
  72. $loginInfo = checkUserLogin();
  73. if (!$loginInfo) {
  74. return json_error([], '请先登录');
  75. }
  76. if (!checkPermission($loginInfo, 'role', 'create')) {
  77. return json_error([], '没有创建角色的权限');
  78. }
  79. $data = Request::only(['role_name', 'privileges']);
  80. if (empty($data['role_name'])) {
  81. return json_error([], '角色名称不能为空');
  82. }
  83. if (empty($data['privileges']) || !is_array($data['privileges'])) {
  84. return json_error([], '权限配置不能为空');
  85. }
  86. if (UserRoleModel::checkRoleExists($data['role_name'], $loginInfo['merchant_id'])) {
  87. return json_error([], '角色名称已存在');
  88. }
  89. $data['merchant_id'] = $loginInfo['merchant_id'];
  90. try {
  91. $role = UserRoleModel::createRole($data);
  92. return json_success(['id' => $role->id], '创建角色成功');
  93. } catch (\Exception $e) {
  94. return json_error([], '创建角色失败:' . $e->getMessage());
  95. }
  96. }
  97. /**
  98. * 更新角色
  99. */
  100. public function update()
  101. {
  102. $loginInfo = checkUserLogin();
  103. if (!$loginInfo) {
  104. return json_error([], '请先登录');
  105. }
  106. if (!checkPermission($loginInfo, 'role', 'update')) {
  107. return json_error([], '没有编辑角色的权限');
  108. }
  109. $id = Request::param('id', 0, 'intval');
  110. if (!$id) {
  111. return json_error([], '角色ID不能为空');
  112. }
  113. $data = Request::only(['role_name', 'privileges']);
  114. if (empty($data['role_name'])) {
  115. return json_error([], '角色名称不能为空');
  116. }
  117. if (empty($data['privileges']) || !is_array($data['privileges'])) {
  118. return json_error([], '权限配置不能为空');
  119. }
  120. $role = UserRoleModel::getRoleById($id, $loginInfo['merchant_id']);
  121. if (!$role) {
  122. return json_error([], '角色不存在');
  123. }
  124. if (UserRoleModel::checkRoleExists($data['role_name'], $loginInfo['merchant_id'], $id)) {
  125. return json_error([], '角色名称已存在');
  126. }
  127. try {
  128. UserRoleModel::updateRole($id, $loginInfo['merchant_id'], $data);
  129. return json_success([], '更新角色成功');
  130. } catch (\Exception $e) {
  131. return json_error([], '更新角色失败:' . $e->getMessage());
  132. }
  133. }
  134. /**
  135. * 删除角色
  136. */
  137. public function delete()
  138. {
  139. $loginInfo = checkUserLogin();
  140. if (!$loginInfo) {
  141. return json_error([], '请先登录');
  142. }
  143. if (!checkPermission($loginInfo, 'role', 'delete')) {
  144. return json_error([], '没有删除角色的权限');
  145. }
  146. $id = Request::param('id', 0, 'intval');
  147. if (!$id) {
  148. return json_error([], '角色ID不能为空');
  149. }
  150. $role = UserRoleModel::getRoleById($id, $loginInfo['merchant_id']);
  151. if (!$role) {
  152. return json_error([], '角色不存在');
  153. }
  154. $superAdminRoleId = Config::get('permission.super_admin_role_id', 1);
  155. if ($id == $superAdminRoleId) {
  156. return json_error([], '不能删除超级管理员角色');
  157. }
  158. $userCount = UserModel::where('user_role', $id)
  159. ->where('merchant_id', $loginInfo['merchant_id'])
  160. ->count();
  161. if ($userCount > 0) {
  162. return json_error([], '该角色下还有用户,不能删除');
  163. }
  164. try {
  165. UserRoleModel::deleteRole($id, $loginInfo['merchant_id']);
  166. return json_success([], '删除角色成功');
  167. } catch (\Exception $e) {
  168. return json_error([], '删除角色失败:' . $e->getMessage());
  169. }
  170. }
  171. }