RoleController.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace App\Http\Controllers\Admin\System;
  3. use App\Http\Logics\Admin\RoleLogic;
  4. use App\Http\Models\Permission;
  5. use App\Http\Models\Role;
  6. use Illuminate\Http\Request;
  7. use App\Http\Controllers\Controller;
  8. class RoleController extends Controller
  9. {
  10. protected $logic;
  11. public function __construct(RoleLogic $logic)
  12. {
  13. $this->logic = $logic;
  14. }
  15. public function index(Request $request)
  16. {
  17. if (!$request->ajax()) {
  18. return view('admin/system/role/index');
  19. }
  20. $roles = Role::query()->orderByDesc('id')->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
  21. return response()->json([
  22. 'rows' => $roles->items(),
  23. 'total' => $roles->total()
  24. ]);
  25. }
  26. public function save(Request $request, $id)
  27. {
  28. if (!$request->ajax()) {
  29. $record = Role::query()->find($id);
  30. return view('admin/system/role/save', [
  31. 'data' => $record
  32. ]);
  33. }
  34. Role::query()->updateOrCreate([
  35. 'id' => $id
  36. ], [
  37. 'name' => $request->input('name')
  38. ]);
  39. return response()->json(['message' => '操作成功']);
  40. }
  41. public function batchDestroy(Request $request)
  42. {
  43. $ids = $request->input('ids');
  44. Role::destroy($ids);
  45. return response()->json(['message' => '操作成功']);
  46. }
  47. public function allotPermissions(Request $request)
  48. {
  49. $roleIds = $request->input('roleIds');
  50. if (!$request->ajax()) {
  51. $selects = [];
  52. if (count($roleIds) == 1) {
  53. $role = Role::query()->where(['id' => $roleIds[0]])->first();
  54. if (!$role) return response()->json(['message' => '参数错误'], 400);
  55. $selects = $role->permissions->pluck('id')->toArray();
  56. }
  57. $permissions = $this->logic->getRoleCanPermissions($role ?? null);
  58. array_walk($permissions, function (&$item) use ($selects) {
  59. $item['open'] = true;
  60. $item['name'] = $item['name'] . ($item['type'] == 1 ? '【菜单】' : '【功能】');
  61. if (in_array($item['id'], $selects)) {
  62. $item['checked'] = true;
  63. }
  64. });
  65. $trees = list_to_tree($permissions, 'id', 'parent_id', 'children');
  66. return view('admin/system/role/permission', [
  67. 'trees' => $trees,
  68. 'roleIds' => $roleIds
  69. ]);
  70. }
  71. $permissionIds = $request->input('permissionIds');
  72. $roles = Role::query()->whereIn('id', $roleIds)->get();
  73. foreach ($roles as $role) {
  74. $role->permissions()->sync($permissionIds);
  75. }
  76. return response()->json(['message' => '操作成功']);
  77. }
  78. }