PermissionController.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?php
  2. namespace Encore\Admin\Controllers;
  3. use Encore\Admin\Form;
  4. use Encore\Admin\Grid;
  5. use Encore\Admin\Layout\Content;
  6. use Encore\Admin\Show;
  7. use Illuminate\Routing\Controller;
  8. use Illuminate\Support\Str;
  9. class PermissionController extends Controller
  10. {
  11. use HasResourceActions;
  12. /**
  13. * Index interface.
  14. *
  15. * @param Content $content
  16. *
  17. * @return Content
  18. */
  19. public function index(Content $content)
  20. {
  21. return $content
  22. ->header(trans('admin.permissions'))
  23. ->description(trans('admin.list'))
  24. ->body($this->grid()->render());
  25. }
  26. /**
  27. * Show interface.
  28. *
  29. * @param mixed $id
  30. * @param Content $content
  31. *
  32. * @return Content
  33. */
  34. public function show($id, Content $content)
  35. {
  36. return $content
  37. ->header(trans('admin.permissions'))
  38. ->description(trans('admin.detail'))
  39. ->body($this->detail($id));
  40. }
  41. /**
  42. * Edit interface.
  43. *
  44. * @param $id
  45. * @param Content $content
  46. *
  47. * @return Content
  48. */
  49. public function edit($id, Content $content)
  50. {
  51. return $content
  52. ->header(trans('admin.permissions'))
  53. ->description(trans('admin.edit'))
  54. ->body($this->form()->edit($id));
  55. }
  56. /**
  57. * Create interface.
  58. *
  59. * @param Content $content
  60. *
  61. * @return Content
  62. */
  63. public function create(Content $content)
  64. {
  65. return $content
  66. ->header(trans('admin.permissions'))
  67. ->description(trans('admin.create'))
  68. ->body($this->form());
  69. }
  70. /**
  71. * Make a grid builder.
  72. *
  73. * @return Grid
  74. */
  75. protected function grid()
  76. {
  77. $permissionModel = config('admin.database.permissions_model');
  78. $grid = new Grid(new $permissionModel());
  79. $grid->id('ID')->sortable();
  80. $grid->slug(trans('admin.slug'));
  81. $grid->name(trans('admin.name'));
  82. $grid->http_path(trans('admin.route'))->display(function ($path) {
  83. return collect(explode("\n", $path))->map(function ($path) {
  84. $method = $this->http_method ?: ['ANY'];
  85. if (Str::contains($path, ':')) {
  86. list($method, $path) = explode(':', $path);
  87. $method = explode(',', $method);
  88. }
  89. $method = collect($method)->map(function ($name) {
  90. return strtoupper($name);
  91. })->map(function ($name) {
  92. return "<span class='label label-primary'>{$name}</span>";
  93. })->implode('&nbsp;');
  94. if (!empty(config('admin.route.prefix'))) {
  95. $path = '/'.trim(config('admin.route.prefix'), '/').$path;
  96. }
  97. return "<div style='margin-bottom: 5px;'>$method<code>$path</code></div>";
  98. })->implode('');
  99. });
  100. $grid->created_at(trans('admin.created_at'));
  101. $grid->updated_at(trans('admin.updated_at'));
  102. $grid->tools(function (Grid\Tools $tools) {
  103. $tools->batch(function (Grid\Tools\BatchActions $actions) {
  104. $actions->disableDelete();
  105. });
  106. });
  107. return $grid;
  108. }
  109. /**
  110. * Make a show builder.
  111. *
  112. * @param mixed $id
  113. *
  114. * @return Show
  115. */
  116. protected function detail($id)
  117. {
  118. $permissionModel = config('admin.database.permissions_model');
  119. $show = new Show($permissionModel::findOrFail($id));
  120. $show->id('ID');
  121. $show->slug(trans('admin.slug'));
  122. $show->name(trans('admin.name'));
  123. $show->http_path(trans('admin.route'))->as(function ($path) {
  124. return collect(explode("\r\n", $path))->map(function ($path) {
  125. $method = $this->http_method ?: ['ANY'];
  126. if (Str::contains($path, ':')) {
  127. list($method, $path) = explode(':', $path);
  128. $method = explode(',', $method);
  129. }
  130. $method = collect($method)->map(function ($name) {
  131. return strtoupper($name);
  132. })->map(function ($name) {
  133. return "<span class='label label-primary'>{$name}</span>";
  134. })->implode('&nbsp;');
  135. if (!empty(config('admin.route.prefix'))) {
  136. $path = '/'.trim(config('admin.route.prefix'), '/').$path;
  137. }
  138. return "<div style='margin-bottom: 5px;'>$method<code>$path</code></div>";
  139. })->implode('');
  140. });
  141. $show->created_at(trans('admin.created_at'));
  142. $show->updated_at(trans('admin.updated_at'));
  143. return $show;
  144. }
  145. /**
  146. * Make a form builder.
  147. *
  148. * @return Form
  149. */
  150. public function form()
  151. {
  152. $permissionModel = config('admin.database.permissions_model');
  153. $form = new Form(new $permissionModel());
  154. $form->display('id', 'ID');
  155. $form->text('slug', trans('admin.slug'))->rules('required');
  156. $form->text('name', trans('admin.name'))->rules('required');
  157. $form->multipleSelect('http_method', trans('admin.http.method'))
  158. ->options($this->getHttpMethodsOptions())
  159. ->help(trans('admin.all_methods_if_empty'));
  160. $form->textarea('http_path', trans('admin.http.path'));
  161. $form->display('created_at', trans('admin.created_at'));
  162. $form->display('updated_at', trans('admin.updated_at'));
  163. return $form;
  164. }
  165. /**
  166. * Get options of HTTP methods select field.
  167. *
  168. * @return array
  169. */
  170. protected function getHttpMethodsOptions()
  171. {
  172. $permissionModel = config('admin.database.permissions_model');
  173. return array_combine($permissionModel::$httpMethods, $permissionModel::$httpMethods);
  174. }
  175. }