Permission.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. declare (strict_types=1);
  3. namespace app\controller;
  4. use app\BaseController;
  5. use app\service\PermissionService;
  6. use think\facade\Request;
  7. class Permission extends BaseController
  8. {
  9. /**
  10. * 获取所有权限配置
  11. */
  12. public function list()
  13. {
  14. $loginInfo = checkUserLogin();
  15. if (!$loginInfo) {
  16. return json_error([], '请先登录');
  17. }
  18. if (!checkPermission($loginInfo, 'Permission', 'list')) {
  19. return json_error([], '没有查看权限配置的权限');
  20. }
  21. try {
  22. $permissions = PermissionService::getAllPermissions();
  23. $tree = PermissionService::formatPermissionsToTree();
  24. return json_success([
  25. 'permissions' => $permissions,
  26. 'tree' => $tree
  27. ], '获取权限配置成功');
  28. } catch (\Exception $e) {
  29. return json_error([], '获取权限配置失败:' . $e->getMessage());
  30. }
  31. }
  32. /**
  33. * 获取权限组配置
  34. */
  35. public function getGroups()
  36. {
  37. $loginInfo = checkUserLogin();
  38. if (!$loginInfo) {
  39. return json_error([], '请先登录');
  40. }
  41. if (!checkPermission($loginInfo, 'Permission', 'list')) {
  42. return json_error([], '没有查看权限配置的权限');
  43. }
  44. try {
  45. $groups = PermissionService::getPermissionGroups();
  46. return json_success($groups, '获取权限组配置成功');
  47. } catch (\Exception $e) {
  48. return json_error([], '获取权限组配置失败:' . $e->getMessage());
  49. }
  50. }
  51. /**
  52. * 根据权限组获取权限
  53. */
  54. public function getPermissionsByGroup()
  55. {
  56. $loginInfo = checkUserLogin();
  57. if (!$loginInfo) {
  58. return json_error([], '请先登录');
  59. }
  60. if (!checkPermission($loginInfo, 'Permission', 'list')) {
  61. return json_error([], '没有查看权限配置的权限');
  62. }
  63. $groupName = Request::get('group', '', 'trim');
  64. if (empty($groupName)) {
  65. return json_error([], '权限组名称不能为空');
  66. }
  67. try {
  68. $permissions = PermissionService::getPermissionsByGroup($groupName);
  69. $formatted = PermissionService::formatUserPermissions($permissions);
  70. return json_success([
  71. 'permissions' => $permissions,
  72. 'formatted' => $formatted
  73. ], '获取权限组权限成功');
  74. } catch (\Exception $e) {
  75. return json_error([], '获取权限组权限失败:' . $e->getMessage());
  76. }
  77. }
  78. /**
  79. * 验证权限格式
  80. */
  81. public function validatePermissions()
  82. {
  83. $loginInfo = checkUserLogin();
  84. if (!$loginInfo) {
  85. return json_error([], '请先登录');
  86. }
  87. if (!checkPermission($loginInfo, 'Permission', 'assign')) {
  88. return json_error([], '没有分配权限的权限');
  89. }
  90. $permissions = Request::post('permissions', []);
  91. // 如果是前端格式的权限,先转换
  92. if (isset($permissions[0]) && is_string($permissions[0])) {
  93. $permissions = PermissionService::parsePermissionsFromFrontend($permissions);
  94. }
  95. try {
  96. $isValid = PermissionService::validatePermissions($permissions);
  97. return json_success([
  98. 'valid' => $isValid,
  99. 'permissions' => $permissions
  100. ], $isValid ? '权限格式正确' : '权限格式错误');
  101. } catch (\Exception $e) {
  102. return json_error([], '验证权限格式失败:' . $e->getMessage());
  103. }
  104. }
  105. /**
  106. * 格式化权限(前端格式转后端格式)
  107. */
  108. public function formatPermissions()
  109. {
  110. $loginInfo = checkUserLogin();
  111. if (!$loginInfo) {
  112. return json_error([], '请先登录');
  113. }
  114. $permissions = Request::post('permissions', []);
  115. $format = Request::post('format', 'backend'); // frontend 或 backend
  116. try {
  117. if ($format === 'frontend') {
  118. // 后端格式转前端格式
  119. $formatted = PermissionService::formatUserPermissions($permissions);
  120. } else {
  121. // 前端格式转后端格式
  122. $formatted = PermissionService::parsePermissionsFromFrontend($permissions);
  123. }
  124. return json_success([
  125. 'original' => $permissions,
  126. 'formatted' => $formatted
  127. ], '权限格式转换成功');
  128. } catch (\Exception $e) {
  129. return json_error([], '权限格式转换失败:' . $e->getMessage());
  130. }
  131. }
  132. }