RoleController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace Dcat\Admin\Controllers;
  3. use Dcat\Admin\Auth\Permission;
  4. use Dcat\Admin\Form;
  5. use Dcat\Admin\Grid;
  6. use Dcat\Admin\Models\Repositories\Role;
  7. use Dcat\Admin\Models\Role as RoleModel;
  8. use Dcat\Admin\Show;
  9. use Dcat\Admin\SimpleGrid;
  10. use Dcat\Admin\Support\Helper;
  11. class RoleController extends AdminController
  12. {
  13. /**
  14. * Get content title.
  15. *
  16. * @return string
  17. */
  18. public function title()
  19. {
  20. return trans('admin.roles');
  21. }
  22. /**
  23. * Make a grid builder.
  24. *
  25. * @return Grid
  26. */
  27. protected function grid()
  28. {
  29. if ($mini = request(SimpleGrid::QUERY_NAME)) {
  30. $grid = new SimpleGrid(new Role());
  31. } else {
  32. $grid = new Grid(new Role());
  33. }
  34. $grid->id('ID')->bold()->sortable();
  35. $grid->slug->label('primary');
  36. $grid->name;
  37. if (! $mini) {
  38. $grid->created_at;
  39. $grid->updated_at->sortable();
  40. }
  41. $grid->disableBatchDelete();
  42. $grid->disableEditButton();
  43. $grid->showQuickEditButton();
  44. $grid->disableFilterButton();
  45. $grid->quickSearch(['id', 'name', 'slug']);
  46. $grid->enableDialogCreate();
  47. $grid->actions(function (Grid\Displayers\Actions $actions) {
  48. $roleModel = config('admin.database.roles_model');
  49. if ($roleModel::isAdministrator($actions->row->slug)) {
  50. $actions->disableDelete();
  51. }
  52. });
  53. return $grid;
  54. }
  55. /**
  56. * Make a show builder.
  57. *
  58. * @param mixed $id
  59. *
  60. * @return Show
  61. */
  62. protected function detail($id)
  63. {
  64. return Show::make($id, new Role('permissions'), function (Show $show) {
  65. $show->id;
  66. $show->slug;
  67. $show->name;
  68. $show->permissions->width(12)->as(function ($permission) {
  69. return collect($permission)->pluck('name');
  70. })->label('primary');
  71. $show->divider();
  72. $show->created_at;
  73. $show->updated_at;
  74. if ($show->key() == RoleModel::ADMINISTRATOR_ID) {
  75. $show->disableDeleteButton();
  76. }
  77. });
  78. }
  79. /**
  80. * Make a form builder.
  81. *
  82. * @return Form
  83. */
  84. public function form()
  85. {
  86. return Form::make(new Role('permissions'), function (Form $form) {
  87. $roleTable = config('admin.database.roles_table');
  88. $connection = config('admin.database.connection');
  89. $id = $form->key();
  90. $form->display('id', 'ID');
  91. $form->text('slug', trans('admin.slug'))
  92. ->required()
  93. ->creationRules(['required', "unique:{$connection}.{$roleTable}"])
  94. ->updateRules(['required', "unique:{$connection}.{$roleTable},slug,$id"]);
  95. $form->text('name', trans('admin.name'))->required();
  96. $form->tree('permissions')
  97. ->nodes(function () {
  98. $permissionModel = config('admin.database.permissions_model');
  99. $permissionModel = new $permissionModel();
  100. return $permissionModel->allNodes();
  101. })
  102. ->customFormat(function ($v) {
  103. if (! $v) {
  104. return [];
  105. }
  106. return array_column($v, 'id');
  107. });
  108. $form->display('created_at', trans('admin.created_at'));
  109. $form->display('updated_at', trans('admin.updated_at'));
  110. if ($id == RoleModel::ADMINISTRATOR_ID) {
  111. $form->disableDeleteButton();
  112. }
  113. });
  114. }
  115. /**
  116. * Remove the specified resource from storage.
  117. *
  118. * @param int $id
  119. *
  120. * @return \Illuminate\Http\Response
  121. */
  122. public function destroy($id)
  123. {
  124. if (in_array(RoleModel::ADMINISTRATOR_ID, Helper::array($id))) {
  125. Permission::error();
  126. }
  127. return parent::destroy($id);
  128. }
  129. }