醉梦人间三千年 7 månader sedan
förälder
incheckning
4eabbdefe1

+ 1 - 1
app/Exceptions/ApiException.php

@@ -13,6 +13,6 @@ class ApiException extends Exception
 {
     public function __construct(array $apiErrorConst, \Throwable $previous = null)
     {
-        parent::__construct($apiErrorConst['message'], $apiErrorConst['code'], $previous);
+        parent::__construct($apiErrorConst['message'], $apiErrorConst['status'], $previous);
     }
 }

+ 13 - 33
app/Http/Controllers/Backend/Server/System/AuthController.php

@@ -8,6 +8,7 @@
 
 namespace App\Http\Controllers\Backend\Server\System;
 
+use App\Enums\System\MenuType;
 use App\Exceptions\ApiException;
 use App\Http\Controllers\Controller;
 use App\Http\Requests\Backend\Server\System\AuthRequest;
@@ -18,6 +19,7 @@ use App\Models\System\User;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Str;
 use function PHPUnit\Framework\isEmpty;
 
 class AuthController extends Controller
@@ -34,29 +36,23 @@ class AuthController extends Controller
 
     public function getPermissionInfo()
     {
-        $permissionInfo = ['user' => null, 'roles' => [], 'permissions' => [], 'menus' => []];
+        $permissionInfo = ['user' => null, 'roles' => ['common'], 'permissions' => [], 'menus' => []];
 
         // 1.1 获得用户信息
-        $user = Auth::user();
+        $user = User::query()->find(Auth::id());
         if (!$user || $user['status'] !== 0) return self::success($permissionInfo);
         $permissionInfo['user'] = $user->only(['id', 'nickname', 'avatar']);
 
         // 1.2 获得角色列表
         $roles = $user->roles()->where('status', 0)->get();
         if (empty($roles)) return self::success($permissionInfo);
-        $permissionInfo['roles'] = $roles->pluck('code');
+        $permissionInfo['roles'] = [...$permissionInfo['roles'], ...$roles->pluck('code')->toArray()];
 
         // 1.3 获得菜单列表
         $menus = Role::getMenus($roles->pluck('id')->all());
         if ($menus->isEmpty()) return self::success($permissionInfo);
-
-//        $allPermissions = $user->getAllPermissions();
-//        if (empty($allPermissions)) return self::success($permissionInfo);
-        // 菜单树
-//        $menus = $allPermissions->where('status', 0)->whereIn('type', [1, 2])->whereIn('pivot.role_id', $roles->pluck('id'))->all();
-//        if (empty($menus)) return self::success($permissionInfo);
-
         $permissionInfo['menus'] = self::buildMenuTree($menus->toArray());
+
         // 权限标识信息
         $permissions = $user->getAllPermissions()->whereIn('pivot.role_id', $roles->pluck('id'))->pluck('name');
         $permissionInfo['permissions'] = $permissions;
@@ -66,16 +62,8 @@ class AuthController extends Controller
 
     protected static function buildMenuTree(array $menuList)
     {
-        // 移除按钮
-        $removeKeys = [];
-        $menuList = collect($menuList);
-
-        $menuList->each(function ($value, $key) use (&$removeKeys) {
-            if ($value->type === 3) $removeKeys[] = $key;
-        });
 
-        // 移除指定的项目
-        $menuList = $menuList->forget($removeKeys);
+        $menuList = collect($menuList)->filter(fn($item) => $item->type !== MenuType::BUTTON);
 
         // 排序,保证菜单的有序性
         $menuList = $menuList->sortBy('sort');
@@ -83,7 +71,7 @@ class AuthController extends Controller
         // 构建菜单树
         $menuMap = collect([]);
 
-        $menuList->each(function ($value) use (&$menuMap) {
+        $menuList->map(function ($value) use (&$menuMap) {
             $menuMap[$value->id] = [
                 "id" => $value->id,
                 "parentId" => $value->parent_id,
@@ -99,12 +87,7 @@ class AuthController extends Controller
             ];
         });
 
-        $menuMap->filter(function ($node) {
-            if ($node['parentId'] !== 0) {
-                return true;
-            }
-            return false;
-        })->each(function ($childNode) use (&$menuMap) {
+        $menuMap->filter(fn($node) => $node['parentId'] !== 0)->each(function ($childNode) use (&$menuMap) {
             // 获得父节点
             $isExistKey = $menuMap->has($childNode['parentId']);
             if (!$isExistKey) {
@@ -116,17 +99,14 @@ class AuthController extends Controller
             $parentNode = $menuMap[$childNode['parentId']];
 
             // 将自己添加到父节点中
-            if (empty($parentNode['children'])) {
-                $parentNode['children'] = [];
-            }
+            if (!isset($parentNode['children'])) $parentNode['children'] = [];
+
             $parentNode['children'][] = $childNode;
             $menuMap[$childNode['parentId']] = $parentNode;
+            $menuMap->forget($childNode['id']);
         });
 
         // 获得到所有的根节点
-        return array_values($menuMap->filter(function ($node) {
-            if ($node['parentId'] === 0) return true;
-            return false;
-        })->toArray());
+        return array_values($menuMap->all());
     }
 }

+ 3 - 2
app/Http/Controllers/Backend/Server/System/RoleController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Backend\Server\System;
 
 use App\Exceptions\ApiException;
 use App\Http\Controllers\Controller;
+use App\Http\Requests\Backend\Server\System\RoleRequest;
 use App\Http\Services\Backend\Server\System\RoleService;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
@@ -17,10 +18,10 @@ class RoleController extends Controller
         $this->roleService = $roleService;
     }
 
-    public function index(Request $request): JsonResponse
+    public function index(RoleRequest $request): JsonResponse
     {
         // 处理首页逻辑
-        $params = $request->all();
+        $params = $request->safe(['name', 'code', 'status', 'createTime', 'pageNo', 'pageSize']);
         $res = $this->roleService->getRoleList($params);
         return self::success($res);
     }

+ 2 - 2
app/Http/Requests/Backend/Server/System/AuthRequest.php

@@ -8,15 +8,15 @@
 
 namespace App\Http\Requests\Backend\Server\System;
 
+use App\Http\Requests\Request;
 use Illuminate\Auth\Events\Lockout;
-use Illuminate\Foundation\Http\FormRequest;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\RateLimiter;
 use Illuminate\Support\Facades\Route;
 use Illuminate\Support\Str;
 use Illuminate\Validation\ValidationException;
 
-class AuthRequest extends FormRequest
+class AuthRequest extends Request
 {
     /**
      * Determine if the user is authorized to make this request.

+ 2 - 3
app/Http/Requests/Backend/Server/System/MenuRequest.php

@@ -9,11 +9,10 @@
 namespace App\Http\Requests\Backend\Server\System;
 
 use App\Http\Requests\Request;
-use Illuminate\Foundation\Http\FormRequest;
 use Illuminate\Support\Facades\Route;
 use Illuminate\Validation\Rule;
 
-class MenuRequest extends FormRequest
+class MenuRequest extends Request
 {
     /**
      * Get the validation rules that apply to the request.
@@ -54,7 +53,7 @@ class MenuRequest extends FormRequest
             'name.required' => '请输入菜单名称!',
             'type.required' => '请选择菜单类型!',
             'type.in' => '菜单类型错误!',
-            '*' => '1参数错误!'
+            '*' => '参数错误!'
         ];
     }
 }

+ 45 - 0
app/Http/Requests/Backend/Server/System/RoleRequest.php

@@ -0,0 +1,45 @@
+<?php
+/**
+ * @Name
+ * @Description
+ * @Author 刘学玺
+ * @Date 2024/3/20 14:54
+ */
+
+namespace App\Http\Requests\Backend\Server\System;
+
+use App\Http\Requests\Request;
+use Illuminate\Support\Facades\Route;
+use Illuminate\Validation\Rule;
+
+class RoleRequest extends Request
+{
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array<string, array|string>
+     */
+    public function rules(): array
+    {
+        $rules = [
+            'name' => ['bail', 'string', 'max:255'],
+            'status' => ['bail', 'integer', Rule::in([0, 1])],
+            'createTime.0' => ['bail', 'date_format:Y-m-d H:i:s', 'before:createTime.1'],
+            'createTime.1' => ['bail', 'date_format:Y-m-d H:i:s'],
+            'code' => ['bail', 'string', 'max:255']
+        ];
+        $actionName = last(explode('@', Route::current()->getActionName()));
+        if ($actionName === 'index') {
+            $rules['pageNo'] = ['bail', 'integer'];
+            $rules['pageSize'] = ['bail', 'integer'];
+        }
+        return $rules;
+    }
+
+    public function messages(): array
+    {
+        return [
+            '*' => '参数错误'
+        ];
+    }
+}

+ 3 - 3
app/Http/Services/Backend/Server/System/DictTypeService.php

@@ -17,6 +17,7 @@ use Symfony\Component\HttpFoundation\Response;
 class DictTypeService extends Service
 {
     protected array $selectColumn = ['id', 'name', 'remark', 'status', 'type'];
+    protected array $listColumn = ['created_at as createTime'];
 
     public function getDictType($id)
     {
@@ -30,8 +31,7 @@ class DictTypeService extends Service
         !empty($params['type']) && $dictType->where('type', $params['type']);
         !empty($params['status']) && $dictType->where('status', $params['status']);
         !empty($params['createTime']) && $dictType->whereIn('created_at', $params['createTime']);
-        $select = ['id', 'name', 'remark', 'status', 'type', 'creator', 'created_at'];
-        $dictTypePage = DictType::query()->paginate($params['pageSize'], $select, 'page', $params['pageNo']);
+        $dictTypePage = DictType::query()->paginate($params['pageSize'], [...$this->selectColumn, ...$this->listColumn], 'page', $params['pageNo']);
         return ['list' => $dictTypePage->items(), 'total' => $dictTypePage->total()];
     }
 
@@ -77,7 +77,7 @@ class DictTypeService extends Service
 
     protected function validateDictDataExists(string $dictType)
     {
-        $isExists = DictData::query()->where('dict_type',$dictType)->count();
+        $isExists = DictData::query()->where('dict_type', $dictType)->count();
         $isExists && self::error(ErrorMessage::DICT_TYPE_EXISTS_DATA, Response::HTTP_UNPROCESSABLE_ENTITY);
     }
 

+ 17 - 14
app/Http/Services/Backend/Server/System/MenuService.php

@@ -23,9 +23,23 @@ use Symfony\Component\HttpFoundation\Response;
 
 class MenuService extends Service
 {
-    protected array $selectColumn = ['id', 'name', 'type', 'sort', 'parent_id as parentId', 'path', 'icon', 'component', 'component_name as componentName', 'status', 'visible', 'keep_alive as keepAlive', 'always_show as alwaysShow'];
+    protected array $selectColumn = ['id', 'name', 'type','permission', 'sort', 'parent_id as parentId', 'path', 'icon', 'component', 'component_name as componentName', 'status', 'visible', 'keep_alive as keepAlive', 'always_show as alwaysShow'];
 //    protected array $selectAppendColumn = ['created_at as createTime'];
 
+    public function getMenuList($params = []): array
+    {
+        $menu = Menu::query();
+        isset($params['name']) && filled($params['name']) && $menu->whereLike('name', "%{$params['name']}%");
+        isset($params['status']) && filled($params['status']) && $menu->where('status', $params['status']);
+        return $menu->orderBy('sort')->select($this->selectColumn)->get()->toArray();
+    }
+
+    public function getMenu($id): array
+    {
+        $menu = Menu::query();
+        return $menu->select($this->selectColumn)->find($id)->toArray();
+    }
+
     /**
      * @throws ApiException
      */
@@ -112,19 +126,7 @@ class MenuService extends Service
         }
     }
 
-    public function getMenu($id): array
-    {
-        $menu = Menu::query();
-        return $menu->select($this->selectColumn)->find($id)->toArray();
-    }
 
-    public function getMenuList($params = []): array
-    {
-        $menu = Menu::query();
-        isset($params['name']) && filled($params['name']) && $menu->whereLike('name', "%{$params['name']}%");
-        isset($params['status']) && filled($params['status']) && $menu->where('status', $params['status']);
-        return $menu->orderBy('sort')->select($this->selectColumn)->get()->toArray();
-    }
 
     public function getSimpleMenuList(): array
     {
@@ -234,7 +236,7 @@ class MenuService extends Service
      * 例如说,只有目录或者菜单类型的菜单,才设置 icon
      *
      */
-    private static function initMenuProperty(&$menu): void
+    private static function initMenuProperty(Menu &$menu): void
     {
         // 菜单为按钮类型时,无需 component、icon、path 属性,进行置空
         if ($menu['type'] === MenuType::BUTTON) {
@@ -243,6 +245,7 @@ class MenuService extends Service
             $menu['icon'] = null;
             $menu['path'] = null;
         }
+        (empty($menu['permission'])) && ($menu['permission'] = null);
     }
 
     private static function filterDisableMenus($menus): array

+ 8 - 4
app/Http/Services/Backend/Server/System/RoleService.php

@@ -23,12 +23,16 @@ class RoleService extends Service
     protected array $selectColumn = ['id', 'name', 'guard_name as guardName', 'code', 'sort', 'status', 'type', 'remark'];
     protected array $appendColumn = ['created_at as createTime'];
 
-    public function getRoleList($data): array
+    public function getRoleList($params): array
     {
+//        'name', 'code', 'status', 'createTime', 'pageNo', 'pageSize‘
+
         $role = Role::query();
-        isset($data['name']) && $role->whereLike('name', "%{$data['name']}%");
-        isset($data['status']) && $role->where('status', $data['status']);
-        $rolePage = $role->select([...$this->selectColumn, ...$this->appendColumn])->orderBy('sort')->paginate($data['pageSize'], ['*'], 'page', $data['pageNo']);
+        isset($params['name']) && filled($params['name']) && $role->whereLike('name', "%{$params['name']}%");
+        isset($params['status']) && filled($params['status']) && $role->where('status', $params['status']);
+        isset($params['code']) && filled($params['code']) && $role->whereLike('code', "%{$params['code']}%");
+        !empty($params['createTime']) && $role->whereBetween('created_at', $params['createTime']);
+        $rolePage = $role->select([...$this->selectColumn, ...$this->appendColumn])->orderBy('sort')->paginate($params['pageSize'], ['*'], 'page', $params['pageNo']);
         return ['list' => $rolePage->items(), 'total' => $rolePage->total()];
     }
 

+ 31 - 31
app/Models/System/Menu.php

@@ -22,7 +22,7 @@ class Menu extends Model
 
     public static $snakeAttributes = false;
 
-    protected $appends = ['permission'];
+    protected $appends = [];
 
     protected $casts = [
 //        'visible' => 'bool',
@@ -31,34 +31,34 @@ class Menu extends Model
 //        'parent_id' => 'camel'
     ];
 
-    public function disableAppends()
-    {
-        $this->appends = [];
-        return $this;
-    }
-
-    public function getPermissionAttribute()
-    {
-        $tableNames = config('permission.table_names');
-        $permission_ids = DB::table($tableNames['model_has_permissions'])->where('model_type', Menu::class)->where('model_id', $this->attributes['id'])->pluck('permission_id');
-        $permission_names = DB::table($tableNames['permissions'])->whereIn('id', $permission_ids)->pluck('name');
-        return implode('|', $permission_names->toArray());
-    }
-
-    public function setComponentNameAttribute($value)
-    {
-        $this->attributes['component_name'] = $value;
-    }
+//    public function disableAppends()
+//    {
+//        $this->appends = [];
+//        return $this;
+//    }
 
-    public function setVisibleAttribute($value)
-    {
-        $this->attributes['visible'] = $value ? 1 : 0;
-    }
+//    public function getPermissionAttribute()
+//    {
+//        $tableNames = config('permission.table_names');
+//        $permission_ids = DB::table($tableNames['model_has_permissions'])->where('model_type', Menu::class)->where('model_id', $this->attributes['id'])->pluck('permission_id');
+//        $permission_names = DB::table($tableNames['permissions'])->whereIn('id', $permission_ids)->pluck('name');
+//        return implode('|', $permission_names->toArray());
+//    }
 
-    public function setAlwaysShowAttribute($value)
-    {
-        $this->attributes['always_show'] = $value ? 1 : 0;
-    }
+//    public function setComponentNameAttribute($value)
+//    {
+//        $this->attributes['component_name'] = $value;
+//    }
+//
+//    public function setVisibleAttribute($value)
+//    {
+//        $this->attributes['visible'] = $value ? 1 : 0;
+//    }
+//
+//    public function setAlwaysShowAttribute($value)
+//    {
+//        $this->attributes['always_show'] = $value ? 1 : 0;
+//    }
 
 
 //    public function getVisibleAttribute($value)
@@ -66,9 +66,9 @@ class Menu extends Model
 //        $this->attributes['visible'] = !$value;
 //    }
 
-    public function setKeepAliveAttribute($value)
-    {
-        $this->attributes['keep_alive'] = $value ? 1 : 0;
-    }
+//    public function setKeepAliveAttribute($value)
+//    {
+//        $this->attributes['keep_alive'] = $value ? 1 : 0;
+//    }
 
 }

+ 5 - 3
app/Models/System/Role.php

@@ -2,6 +2,7 @@
 
 namespace App\Models\System;
 
+use App\Enums\Common\Status;
 use Illuminate\Support\Facades\DB;
 use Spatie\Permission\Models\Role as PermissionRole;
 use Spatie\Permission\Traits\HasPermissions;
@@ -12,10 +13,11 @@ class Role extends PermissionRole
     use HasPermissions;
     use RefreshesPermissionCache;
 
-    public static function getMenus(array $role_ids)
+    public static function getMenus(array $role_ids): \Illuminate\Support\Collection
     {
-        $menu_ids = DB::table('system_role_has_menus')->whereIn('role_id',$role_ids)->pluck('menu_id')->all();
-        return DB::table('system_menus')->whereIn('id',$menu_ids)->where('status', 0)->get();
+        $tableNames = config('permission.table_names');
+        $menu_ids = DB::table($tableNames['model_has_roles'])->whereIn('role_id', $role_ids)->pluck('model_id')->all();
+        return DB::table('system_menus')->whereIn('id', $menu_ids)->where('status', Status::ENABLE)->get();
     }
 //    public function __construct(array $attributes = [])
 //    {

+ 1 - 0
database/migrations/2024_08_29_032939_create_system_menus_table.php

@@ -20,6 +20,7 @@ return new class extends Migration {
             $table->bigIncrements('id'); // permission id
             $table->string('name', 50)->comment('菜单名称');
             $table->tinyInteger('type')->comment('菜单类型');
+            $table->string('permission', 255)->nullable()->comment('权限标识');
             $table->integer('sort')->default(0)->comment('显示顺序');
             $table->bigInteger('parent_id')->default(0)->comment('父菜单ID');
             $table->string('path', 200)->nullable()->comment('路由地址');

+ 3 - 3
database/seeders/DatabaseSeeder.php

@@ -14,13 +14,13 @@ class DatabaseSeeder extends Seeder
     public function run(): void
     {
         $this->call([
+            SystemDictTableSeeder::class,
             SystemUsersTableSeeder::class,
             SystemRolesTableSeeder::class,
-            SystemModelHasRolesTableSeeder::class,
             SystemMenusTableSeeder::class,
+            SystemModelHasRolesTableSeeder::class,
             SystemPermissionsTableSeeder::class,
-            SystemRoleHasPermissionsTableSeeder::class,
-            SystemDictTableSeeder::class
+            SystemRoleHasPermissionsTableSeeder::class
             // 其他Seeder类...
         ]);
     }

+ 9 - 9
database/seeders/SystemDictTableSeeder.php

@@ -14,21 +14,21 @@ class SystemDictTableSeeder extends Seeder
     public function run(): void
     {
         // 系统状态
-        DB::table('system_dict_type')->insert(['id' => 10, 'name' => '系统状态', 'type' => 'common_status', 'creator' => '系统']);
+        DB::table('system_dict_type')->insert(['id' => 10, 'name' => '系统状态', 'type' => 'common_status', 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
 
-        DB::table('system_dict_data')->insert(['label' => '开启', 'value' => 0, 'dict_type' => 'common_status', 'creator' => '系统']);
-        DB::table('system_dict_data')->insert(['label' => '关闭', 'value' => 1, 'dict_type' => 'common_status', 'creator' => '系统']);
+        DB::table('system_dict_data')->insert(['label' => '开启', 'value' => 0, 'dict_type' => 'common_status', 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
+        DB::table('system_dict_data')->insert(['label' => '关闭', 'value' => 1, 'dict_type' => 'common_status', 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
 
         // 角色类型
-        DB::table('system_dict_type')->insert(['id' => 110, 'name' => '角色类型', 'type' => 'system_role_type', 'creator' => '系统']);
+        DB::table('system_dict_type')->insert(['id' => 110, 'name' => '角色类型', 'type' => 'system_role_type', 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
 
-        DB::table('system_dict_data')->insert(['label' => '内置', 'value' => 1, 'dict_type' => 'system_role_type', 'creator' => '系统']);
-        DB::table('system_dict_data')->insert(['label' => '自定义', 'value' => 2, 'dict_type' => 'system_role_type', 'creator' => '系统']);
+        DB::table('system_dict_data')->insert(['label' => '内置', 'value' => 1, 'dict_type' => 'system_role_type', 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
+        DB::table('system_dict_data')->insert(['label' => '自定义', 'value' => 2, 'dict_type' => 'system_role_type', 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
 
         // 菜单类型
-        DB::table('system_dict_data')->insert(['label' => '目录', 'value' => 1, 'dict_type' => 'system_menu_type', 'creator' => '系统']);
-        DB::table('system_dict_data')->insert(['label' => '菜单', 'value' => 2, 'dict_type' => 'system_menu_type', 'creator' => '系统']);
-        DB::table('system_dict_data')->insert(['label' => '按钮', 'value' => 3, 'dict_type' => 'system_menu_type', 'creator' => '系统']);
+        DB::table('system_dict_data')->insert(['label' => '目录', 'value' => 1, 'dict_type' => 'system_menu_type', 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
+        DB::table('system_dict_data')->insert(['label' => '菜单', 'value' => 2, 'dict_type' => 'system_menu_type', 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
+        DB::table('system_dict_data')->insert(['label' => '按钮', 'value' => 3, 'dict_type' => 'system_menu_type', 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
 
 
     }

+ 17 - 42
database/seeders/SystemMenusTableSeeder.php

@@ -27,51 +27,26 @@ class SystemMenusTableSeeder extends Seeder
 
         // 按钮
         // 角色管理
-        DB::table('system_menus')->insert(['id' => 111, 'name' => '角色查询', 'type' => 3, 'parent_id' => 110, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 112, 'name' => '角色新增', 'type' => 3, 'parent_id' => 110, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 113, 'name' => '角色修改', 'type' => 3, 'parent_id' => 110, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 114, 'name' => '角色删除', 'type' => 3, 'parent_id' => 110, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 115, 'name' => '角色导出', 'type' => 3, 'parent_id' => 110, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 116, 'name' => '设置角色菜单权限', 'type' => 3, 'parent_id' => 110, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 117, 'name' => '设置角色数据权限', 'type' => 3, 'parent_id' => 110, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 118, 'name' => '设置用户角色', 'type' => 3, 'parent_id' => 110, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 111, 'name' => '角色查询', 'type' => 3, 'permission' => 'system:role:query', 'parent_id' => 110, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 112, 'name' => '角色新增', 'type' => 3, 'permission' => 'system:role:create', 'parent_id' => 110, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 113, 'name' => '角色修改', 'type' => 3, 'permission' => 'system:role:update', 'parent_id' => 110, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 114, 'name' => '角色删除', 'type' => 3, 'permission' => 'system:role:delete', 'parent_id' => 110, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 115, 'name' => '角色导出', 'type' => 3, 'permission' => 'system:role:export', 'parent_id' => 110, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 116, 'name' => '设置角色菜单权限', 'type' => 3, 'permission' => 'system:permission:assign-role-menu', 'parent_id' => 110, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 117, 'name' => '设置角色数据权限', 'type' => 3, 'permission' => 'system:permission:assign-role-data-scope', 'parent_id' => 110, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 118, 'name' => '设置用户角色', 'type' => 3, 'permission' => 'system:permission:assign-user-role', 'parent_id' => 110, 'creator' => '系统']);
 
         // 菜单管理
-        DB::table('system_menus')->insert(['id' => 121, 'name' => '菜单查询', 'type' => 3, 'parent_id' => 120, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 122, 'name' => '菜单新增', 'type' => 3, 'parent_id' => 120, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 123, 'name' => '菜单修改', 'type' => 3, 'parent_id' => 120, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 124, 'name' => '菜单删除', 'type' => 3, 'parent_id' => 120, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 121, 'name' => '菜单查询', 'type' => 3, 'permission' => 'system:menu:query', 'parent_id' => 120, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 122, 'name' => '菜单新增', 'type' => 3, 'permission' => 'system:menu:create', 'parent_id' => 120, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 123, 'name' => '菜单修改', 'type' => 3, 'permission' => 'system:menu:update', 'parent_id' => 120, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 124, 'name' => '菜单删除', 'type' => 3, 'permission' => 'system:menu:delete', 'parent_id' => 120, 'creator' => '系统']);
         // 字典管理
-        DB::table('system_menus')->insert(['id' => 151, 'name' => '字典查询', 'type' => 3, 'parent_id' => 150, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 152, 'name' => '字典新增', 'type' => 3, 'parent_id' => 150, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 153, 'name' => '字典修改', 'type' => 3, 'parent_id' => 150, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 154, 'name' => '字典删除', 'type' => 3, 'parent_id' => 150, 'creator' => '系统']);
-        DB::table('system_menus')->insert(['id' => 155, 'name' => '字典导出', 'type' => 3, 'parent_id' => 150, 'creator' => '系统']);
-
-
-        // 角色菜单
-        // 系统管理
-        DB::table('system_role_has_menus')->insert(['menu_id' => 1, 'role_id' => 1]);
-        // 角色管理
-        DB::table('system_role_has_menus')->insert(['menu_id' => 110, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 111, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 112, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 113, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 114, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 115, 'role_id' => 1]);
-        // 菜单管理
-        DB::table('system_role_has_menus')->insert(['menu_id' => 120, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 121, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 122, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 123, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 124, 'role_id' => 1]);
-        // 字典管理
-        DB::table('system_role_has_menus')->insert(['menu_id' => 150, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 151, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 152, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 153, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 154, 'role_id' => 1]);
-        DB::table('system_role_has_menus')->insert(['menu_id' => 155, 'role_id' => 1]);
+        DB::table('system_menus')->insert(['id' => 151, 'name' => '字典查询', 'type' => 3, 'permission' => 'system:dict:query', 'parent_id' => 150, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 152, 'name' => '字典新增', 'type' => 3, 'permission' => 'system:dict:create', 'parent_id' => 150, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 153, 'name' => '字典修改', 'type' => 3, 'permission' => 'system:dict:update', 'parent_id' => 150, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 154, 'name' => '字典删除', 'type' => 3, 'permission' => 'system:dict:delete', 'parent_id' => 150, 'creator' => '系统']);
+        DB::table('system_menus')->insert(['id' => 155, 'name' => '字典导出', 'type' => 3, 'permission' => 'system:dict:export', 'parent_id' => 150, 'creator' => '系统']);
 
 
     }

+ 25 - 1
database/seeders/SystemModelHasRolesTableSeeder.php

@@ -2,6 +2,7 @@
 
 namespace Database\Seeders;
 
+use App\Models\System\Menu;
 use App\Models\System\User;
 use Illuminate\Database\Console\Seeds\WithoutModelEvents;
 use Illuminate\Database\Seeder;
@@ -14,8 +15,31 @@ class SystemModelHasRolesTableSeeder extends Seeder
      */
     public function run(): void
     {
-        //
+        // 用户所属角色
         DB::table('model_has_roles')->insert(['role_id' => 1, 'model_type' => User::class, 'model_id' => 1]);
 
+        // 菜单所属角色
+        // 系统管理
+        DB::table('model_has_roles')->insert(['model_id' => 1, 'role_id' => 1, 'model_type' => Menu::class]);
+        // 角色管理
+        DB::table('model_has_roles')->insert(['model_id' => 110, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 111, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 112, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 113, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 114, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 115, 'role_id' => 1, 'model_type' => Menu::class]);
+        // 菜单管理
+        DB::table('model_has_roles')->insert(['model_id' => 120, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 121, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 122, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 123, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 124, 'role_id' => 1, 'model_type' => Menu::class]);
+        // 字典管理
+        DB::table('model_has_roles')->insert(['model_id' => 150, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 151, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 152, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 153, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 154, 'role_id' => 1, 'model_type' => Menu::class]);
+        DB::table('model_has_roles')->insert(['model_id' => 155, 'role_id' => 1, 'model_type' => Menu::class]);
     }
 }

+ 1 - 1
database/seeders/SystemRolesTableSeeder.php

@@ -16,7 +16,7 @@ class SystemRolesTableSeeder extends Seeder
         $tableNames = config('permission.table_names');
 
         //
-        DB::table($tableNames['roles'])->insert(['id' => 1, 'name' => '超级管理员', 'code' => 'super_admin', 'type' => 1, 'creator' => '系统']);
+        DB::table($tableNames['roles'])->insert(['id' => 1, 'name' => '超级管理员', 'code' => 'super_admin', 'type' => 1, 'creator' => '系统' , 'created_at' => now(), 'updated_at' => now()]);
 
     }
 }