SystemRoleHasPermissionsController.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. namespace App\Http\Controllers\admins;
  3. use App\Modes\SystemRoleHasPermissions;
  4. use App\Modes\SystemRoles;
  5. use App\Modes\User;
  6. use Illuminate\Http\Request;
  7. use App\Http\Controllers\Controller;
  8. use Spatie\Permission\Models\Permission;
  9. use Spatie\Permission\Models\Role;
  10. class SystemRoleHasPermissionsController extends Controller
  11. {
  12. /**
  13. * 角色分配权限
  14. * @author fatty
  15. * @date 2019/1/7
  16. * @param $roleId
  17. * @param $permissionId
  18. * @description
  19. */
  20. public function syncPermissions(Request $request)
  21. {
  22. $roleId = $request->post('roleid');
  23. // 限制超级管理员角色不能移除授权
  24. $role = SystemRoles::find($roleId);
  25. if (empty($role)) {
  26. return showJsonErr('角色不存在');
  27. }
  28. if ($role->is_super == 1) {
  29. return showJsonErr('抱歉,您的权限不足');
  30. }
  31. // if (\Auth::user()->is_super != 1) {
  32. // return showJsonErr('抱歉,您的权限不足');
  33. // }
  34. \DB::beginTransaction();
  35. try {
  36. $permission = $role->permissions;
  37. if ($permission->isNotEmpty()) {
  38. foreach ($permission as $item) {
  39. $role->revokePermissionTo($item);
  40. }
  41. }
  42. $permissionIds = $request->post('permissionId');
  43. if (!empty($permissionIds)) {
  44. if (is_numeric($permissionIds)) {
  45. $role = self::rolePermissions($role, $permissionIds);
  46. if ($role == false) {
  47. \DB::rollBack();
  48. return showJsonErr('授权' . $permissionIds . '失败');
  49. }
  50. } else {
  51. $permissionIds = explode(',', $permissionIds);
  52. foreach ($permissionIds as $permissionId) {
  53. $role = self::rolePermissions($role, $permissionId);
  54. if ($role == false) {
  55. \DB::rollBack();
  56. return showJsonErr('授权' . $permissionId . '失败');
  57. }
  58. }
  59. }
  60. }
  61. \DB::commit();
  62. return showJson(101, 1001, $role);
  63. } catch (\Exception $exception) {
  64. \DB::rollBack();
  65. return showJsonErr($exception->getMessage());
  66. }
  67. }
  68. /**
  69. * 从角色中删除权限
  70. * @author fatty
  71. * @date 2019/1/8
  72. * @param Request $request
  73. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  74. * @description
  75. */
  76. public function revoPermission(Request $request)
  77. {
  78. $validator = \Validator::make($param = $request->all(), [
  79. 'roleid' => 'required|integer|exists:system_roles,id',
  80. 'permissionId' => 'required'
  81. ]);
  82. if ($validator->fails()) {
  83. return showJsonErr($validator->errors()->first());
  84. }
  85. // 限制超级管理员角色不能移除权限
  86. $role = SystemRoles::find($param['roleid']);
  87. if ($role->is_super == 1) {
  88. return showJsonErr('抱歉,您的权限不足');
  89. }
  90. \DB::beginTransaction();
  91. try {
  92. if (is_numeric($param['permissionId'])) {
  93. $res = self::roleRevoPermissions($param['roleid'], $param['permissionId']);
  94. if ($res == false) {
  95. \DB::rollBack();
  96. return showJsonErr('移除权限-' . $param['permissionId'] . '失败');
  97. }
  98. } else {
  99. $permissionIds = explode(',', $param['permissionId']);
  100. foreach ($permissionIds as $permissionId) {
  101. $res = self::roleRevoPermissions($param['roleid'], $permissionId);
  102. if ($res == false) {
  103. \DB::rollBack();
  104. return showJsonErr('移除权限-' . $param['permissionId'] . '失败');
  105. }
  106. }
  107. }
  108. \DB::commit();
  109. return showJson(101, 1001, $res);
  110. } catch (\Exception $exception) {
  111. \DB::rollBack();
  112. return showJsonErr($exception->getMessage());
  113. }
  114. }
  115. /**
  116. * 角色移除权限
  117. * @author lyh
  118. * @date 2019/4/1
  119. * @param $roleid
  120. * @param $permissionId
  121. * @return bool
  122. * @description
  123. */
  124. private static function roleRevoPermissions($roleid, $permissionId)
  125. {
  126. // 判断当前用户是否拥有权限
  127. if (\Auth::user()->hasPermissionTo($permissionId)) {
  128. $role = Role::findById($roleid, config('permission.guard'));
  129. $permission = Permission::findById($permissionId, config('permission.guard'));
  130. // 判断角色是否已有该权限
  131. if (!SystemRoleHasPermissions::whereRoleId($roleid)->wherePermissionId($permissionId)->exists()) {
  132. return false;
  133. }
  134. return $role->revokePermissionTo($permission);
  135. }
  136. return false;
  137. }
  138. /**
  139. * 给角色分配权限
  140. * @author lyh
  141. * @date 2019/4/1
  142. * @param $roleid
  143. * @param $permissionId
  144. * @return bool|\Spatie\Permission\Contracts\Role
  145. * @description
  146. */
  147. private static function rolePermissions($role, $permissionId)
  148. {
  149. // 判断当前登录用户没有的权限不能操作
  150. $permission = Permission::findById($permissionId, config('permission.guard'));
  151. $role = $role->givePermissionTo($permission);
  152. return $role;
  153. }
  154. }