Просмотр исходного кода

增加角色以及权限表单绑定菜单功能

jqh 4 лет назад
Родитель
Сommit
31c5338541

+ 6 - 1
config/admin.php

@@ -215,7 +215,6 @@ return [
             'auth/logout',
             'auth/logout',
             'auth/setting',
             'auth/setting',
         ],
         ],
-
     ],
     ],
 
 
     /*
     /*
@@ -234,6 +233,12 @@ return [
         // Whether enable menu bind to a permission.
         // Whether enable menu bind to a permission.
         'bind_permission' => true,
         'bind_permission' => true,
 
 
+        // Whether enable role bind to menu.
+        'role_bind_menu' => true,
+
+        // Whether enable permission bind to menu.
+        'permission_bind_menu' => true,
+
         'default_icon' => 'feather icon-circle',
         'default_icon' => 'feather icon-circle',
     ],
     ],
 
 

+ 6 - 0
src/Console/stubs/config.stub

@@ -231,6 +231,12 @@ return [
         // Whether enable menu bind to a permission.
         // Whether enable menu bind to a permission.
         'bind_permission' => true,
         'bind_permission' => true,
 
 
+        // Whether enable role bind to menu.
+        'role_bind_menu' => true,
+
+        // Whether enable permission bind to menu.
+        'permission_bind_menu' => true,
+
 		'default_icon' => 'feather icon-circle',
 		'default_icon' => 'feather icon-circle',
     ],
     ],
 
 

+ 2 - 0
src/Http/Controllers/MenuController.php

@@ -46,6 +46,7 @@ class MenuController extends AdminController
                     if ($menuModel::withPermission()) {
                     if ($menuModel::withPermission()) {
                         $form->tree('permissions', trans('admin.permission'))
                         $form->tree('permissions', trans('admin.permission'))
                             ->expand(false)
                             ->expand(false)
+                            ->treeState(false)
                             ->nodes((new $permissionModel())->allNodes());
                             ->nodes((new $permissionModel())->allNodes());
                     }
                     }
 
 
@@ -136,6 +137,7 @@ class MenuController extends AdminController
             }
             }
             if ($menuModel::withPermission()) {
             if ($menuModel::withPermission()) {
                 $form->tree('permissions', trans('admin.permission'))
                 $form->tree('permissions', trans('admin.permission'))
+                    ->treeState(false)
                     ->nodes(function () {
                     ->nodes(function () {
                         $permissionModel = config('admin.database.permissions_model');
                         $permissionModel = config('admin.database.permissions_model');
 
 

+ 26 - 1
src/Http/Controllers/PermissionController.php

@@ -79,7 +79,13 @@ class PermissionController extends AdminController
 
 
     public function form()
     public function form()
     {
     {
-        return Form::make(new Permission(), function (Form $form) {
+        $with = [];
+
+        if ($bindMenu = config('admin.menu.permission_bind_menu', true)) {
+            $with[] = 'menus';
+        }
+
+        return Form::make(Permission::with($with), function (Form $form) use ($bindMenu) {
             $permissionTable = config('admin.database.permissions_table');
             $permissionTable = config('admin.database.permissions_table');
             $connection = config('admin.database.connection');
             $connection = config('admin.database.connection');
             $permissionModel = config('admin.database.permissions_model');
             $permissionModel = config('admin.database.permissions_model');
@@ -107,6 +113,25 @@ class PermissionController extends AdminController
             $form->tags('http_path', trans('admin.http.path'))
             $form->tags('http_path', trans('admin.http.path'))
                 ->options($this->getRoutes());
                 ->options($this->getRoutes());
 
 
+            if ($bindMenu) {
+                $form->tree('menus', trans('admin.menu'))
+                    ->treeState(false)
+                    ->setTitleColumn('title')
+                    ->nodes(function () {
+                        $model = config('admin.database.menu_model');
+                        $model = new $model();
+
+                        return $model->allNodes();
+                    })
+                    ->customFormat(function ($v) {
+                        if (! $v) {
+                            return [];
+                        }
+
+                        return array_column($v, 'id');
+                    });
+            }
+
             $form->display('created_at', trans('admin.created_at'));
             $form->display('created_at', trans('admin.created_at'));
             $form->display('updated_at', trans('admin.updated_at'));
             $form->display('updated_at', trans('admin.updated_at'));
 
 

+ 26 - 1
src/Http/Controllers/RoleController.php

@@ -75,7 +75,13 @@ class RoleController extends AdminController
 
 
     public function form()
     public function form()
     {
     {
-        return Form::make(Role::with(['permissions']), function (Form $form) {
+        $with = ['permissions'];
+
+        if ($bindMenu = config('admin.menu.role_bind_menu', true)) {
+            $with[] = 'menus';
+        }
+
+        return Form::make(Role::with($with), function (Form $form) use ($bindMenu) {
             $roleTable = config('admin.database.roles_table');
             $roleTable = config('admin.database.roles_table');
             $connection = config('admin.database.connection');
             $connection = config('admin.database.connection');
 
 
@@ -105,6 +111,25 @@ class RoleController extends AdminController
                     return array_column($v, 'id');
                     return array_column($v, 'id');
                 });
                 });
 
 
+            if ($bindMenu) {
+                $form->tree('menus', trans('admin.menu'))
+                    ->treeState(false)
+                    ->setTitleColumn('title')
+                    ->nodes(function () {
+                        $model = config('admin.database.menu_model');
+                        $model = new $model();
+
+                        return $model->allNodes();
+                    })
+                    ->customFormat(function ($v) {
+                        if (! $v) {
+                            return [];
+                        }
+
+                        return array_column($v, 'id');
+                    });
+            }
+
             $form->display('created_at', trans('admin.created_at'));
             $form->display('created_at', trans('admin.created_at'));
             $form->display('updated_at', trans('admin.updated_at'));
             $form->display('updated_at', trans('admin.updated_at'));
 
 

+ 12 - 0
src/Models/Permission.php

@@ -65,6 +65,18 @@ class Permission extends Model implements Sortable
         return $this->belongsToMany($relatedModel, $pivotTable, 'permission_id', 'role_id');
         return $this->belongsToMany($relatedModel, $pivotTable, 'permission_id', 'role_id');
     }
     }
 
 
+    /**
+     * @return BelongsToMany
+     */
+    public function menus(): BelongsToMany
+    {
+        $pivotTable = config('admin.database.permission_menu_table');
+
+        $relatedModel = config('admin.database.menu_model');
+
+        return $this->belongsToMany($relatedModel, $pivotTable, 'permission_id', 'menu_id')->withTimestamps();
+    }
+
     /**
     /**
      * If request should pass through the current permission.
      * If request should pass through the current permission.
      *
      *

+ 12 - 0
src/Models/Role.php

@@ -64,6 +64,18 @@ class Role extends Model
         return $this->belongsToMany($relatedModel, $pivotTable, 'role_id', 'permission_id')->withTimestamps();
         return $this->belongsToMany($relatedModel, $pivotTable, 'role_id', 'permission_id')->withTimestamps();
     }
     }
 
 
+    /**
+     * @return BelongsToMany
+     */
+    public function menus(): BelongsToMany
+    {
+        $pivotTable = config('admin.database.role_menu_table');
+
+        $relatedModel = config('admin.database.menu_model');
+
+        return $this->belongsToMany($relatedModel, $pivotTable, 'role_id', 'menu_id')->withTimestamps();
+    }
+
     /**
     /**
      * Check user has permission.
      * Check user has permission.
      *
      *