Browse Source

禁止删除默认用户以及超级管理员角色

jqh 6 years ago
parent
commit
7549bb382d

+ 33 - 3
src/Controllers/RoleController.php

@@ -2,17 +2,22 @@
 
 namespace Dcat\Admin\Controllers;
 
+use Dcat\Admin\Auth\Permission;
 use Dcat\Admin\Models\Repositories\Role;
+use Dcat\Admin\Models\Role as RoleModel;
 use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Layout\Content;
 use Dcat\Admin\MiniGrid;
 use Dcat\Admin\Show;
+use Dcat\Admin\Support\Helper;
 use Illuminate\Routing\Controller;
 
 class RoleController extends Controller
 {
-    use HasResourceActions;
+    use HasResourceActions {
+        destroy as delete;
+    }
 
     /**
      * Index interface.
@@ -58,7 +63,7 @@ class RoleController extends Controller
         return $content
             ->header(trans('admin.roles'))
             ->description(trans('admin.edit'))
-            ->body($this->form()->edit($id));
+            ->body($this->form($id)->edit($id));
     }
 
     /**
@@ -143,6 +148,10 @@ class RoleController extends Controller
         $show->created_at;
         $show->updated_at;
 
+        if ($id == RoleModel::ADMINISTRATOR_ID) {
+            $show->disableDeleteButton();
+        }
+
         return $show;
     }
 
@@ -151,7 +160,7 @@ class RoleController extends Controller
      *
      * @return Form
      */
-    public function form()
+    public function form($id = null)
     {
         $form = new Form(new Role());
 
@@ -175,6 +184,27 @@ class RoleController extends Controller
         $form->display('created_at', trans('admin.created_at'));
         $form->display('updated_at', trans('admin.updated_at'));
 
+        if ($id == RoleModel::ADMINISTRATOR_ID) {
+            $form->disableDeleteButton();
+        }
+
         return $form;
     }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param int $id
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($id)
+    {
+        if (in_array(RoleModel::ADMINISTRATOR_ID, Helper::array($id))) {
+            Permission::error();
+        }
+
+        return $this->delete($id);
+    }
+
 }

+ 31 - 2
src/Controllers/UserController.php

@@ -2,18 +2,23 @@
 
 namespace Dcat\Admin\Controllers;
 
+use Dcat\Admin\Auth\Permission;
 use Dcat\Admin\Models\Repositories\Administrator;
+use Dcat\Admin\Models\Administrator as AdministratorModel;
 use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Layout\Content;
 use Dcat\Admin\MiniGrid;
 use Dcat\Admin\Show;
+use Dcat\Admin\Support\Helper;
 use Dcat\Admin\Widgets\Tree;
 use Illuminate\Routing\Controller;
 
 class UserController extends Controller
 {
-    use HasResourceActions;
+    use HasResourceActions {
+        destroy as delete;
+    }
 
     /**
      * Index interface.
@@ -116,7 +121,7 @@ class UserController extends Controller
         $grid->updated_at->sortable();
 
         $grid->actions(function (Grid\Displayers\Actions $actions) {
-            if ($actions->getKey() == 1) {
+            if ($actions->getKey() == AdministratorModel::DEFAULT_ID) {
                 $actions->disableDelete();
             }
         });
@@ -204,6 +209,10 @@ class UserController extends Controller
             return $tree->render();
         });
 
+        if ($id == AdministratorModel::DEFAULT_ID) {
+            $show->disableDeleteButton();
+        }
+
         return $show;
     }
 
@@ -255,7 +264,27 @@ class UserController extends Controller
             }
         });
 
+        if ($id == AdministratorModel::DEFAULT_ID) {
+            $form->disableDeleteButton();
+        }
+
         return $form;
     }
 
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param int $id
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($id)
+    {
+        if (in_array(AdministratorModel::DEFAULT_ID, Helper::array($id))) {
+            Permission::error();
+        }
+
+        return $this->delete($id);
+    }
+
 }

+ 2 - 0
src/Models/Administrator.php

@@ -18,6 +18,8 @@ class Administrator extends Model implements AuthenticatableContract
 {
     use Authenticatable, HasPermissions;
 
+    const DEFAULT_ID = 1;
+
     protected $fillable = ['username', 'password', 'name', 'avatar'];
 
     /**

+ 2 - 0
src/Models/Role.php

@@ -10,6 +10,8 @@ class Role extends Model
 {
     const ADMINISTRATOR = 'administrator';
 
+    const ADMINISTRATOR_ID = 1;
+
     protected $fillable = ['name', 'slug'];
 
     /**