RoleController.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. namespace Dcat\Admin\Http\Controllers;
  3. use Dcat\Admin\Auth\Permission;
  4. use Dcat\Admin\Form;
  5. use Dcat\Admin\Grid;
  6. use Dcat\Admin\Http\Repositories\Role;
  7. use Dcat\Admin\Models\Role as RoleModel;
  8. use Dcat\Admin\Show;
  9. use Dcat\Admin\Support\Helper;
  10. use Dcat\Admin\Widgets\Tree;
  11. class RoleController extends AdminController
  12. {
  13. public function title()
  14. {
  15. return trans('admin.roles');
  16. }
  17. protected function grid()
  18. {
  19. return new Grid(new Role(), function (Grid $grid) {
  20. $grid->column('id', 'ID')->sortable();
  21. $grid->column('slug')->label('primary');
  22. $grid->column('name');
  23. $grid->column('created_at');
  24. $grid->column('updated_at')->sortable();
  25. $grid->disableEditButton();
  26. $grid->showQuickEditButton();
  27. $grid->quickSearch(['id', 'name', 'slug']);
  28. $grid->enableDialogCreate();
  29. $grid->actions(function (Grid\Displayers\Actions $actions) {
  30. $roleModel = config('admin.database.roles_model');
  31. if ($roleModel::isAdministrator($actions->row->slug)) {
  32. $actions->disableDelete();
  33. }
  34. });
  35. });
  36. }
  37. protected function detail($id)
  38. {
  39. return Show::make($id, new Role('permissions'), function (Show $show) {
  40. $show->field('id');
  41. $show->field('slug');
  42. $show->field('name');
  43. $show->field('permissions')->unescape()->as(function ($permission) {
  44. $permissionModel = config('admin.database.permissions_model');
  45. $permissionModel = new $permissionModel();
  46. $nodes = $permissionModel->allNodes();
  47. $tree = Tree::make($nodes);
  48. $keyName = $permissionModel->getKeyName();
  49. $tree->check(
  50. array_column(Helper::array($permission), $keyName)
  51. );
  52. return $tree->render();
  53. });
  54. $show->field('created_at');
  55. $show->field('updated_at');
  56. if ($show->getKey() == RoleModel::ADMINISTRATOR_ID) {
  57. $show->disableDeleteButton();
  58. }
  59. });
  60. }
  61. public function form()
  62. {
  63. return Form::make(Role::with(['permissions']), function (Form $form) {
  64. $roleTable = config('admin.database.roles_table');
  65. $connection = config('admin.database.connection');
  66. $id = $form->getKey();
  67. $form->display('id', 'ID');
  68. $form->text('slug', trans('admin.slug'))
  69. ->required()
  70. ->creationRules(['required', "unique:{$connection}.{$roleTable}"])
  71. ->updateRules(['required', "unique:{$connection}.{$roleTable},slug,$id"]);
  72. $form->text('name', trans('admin.name'))->required();
  73. $form->tree('permissions')
  74. ->nodes(function () {
  75. $permissionModel = config('admin.database.permissions_model');
  76. $permissionModel = new $permissionModel();
  77. return $permissionModel->allNodes();
  78. })
  79. ->customFormat(function ($v) {
  80. if (! $v) {
  81. return [];
  82. }
  83. return array_column($v, 'id');
  84. });
  85. $form->display('created_at', trans('admin.created_at'));
  86. $form->display('updated_at', trans('admin.updated_at'));
  87. if ($id == RoleModel::ADMINISTRATOR_ID) {
  88. $form->disableDeleteButton();
  89. }
  90. });
  91. }
  92. public function destroy($id)
  93. {
  94. if (in_array(RoleModel::ADMINISTRATOR_ID, Helper::array($id))) {
  95. Permission::error();
  96. }
  97. return parent::destroy($id);
  98. }
  99. }