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

+ 2 - 0
app/Enums/Common/ErrorMessage.php

@@ -9,4 +9,6 @@ final class ErrorMessage extends Enum
     const DICT_TYPE_DUPLICATE = '字典类型重复'; // 关闭
     const DICT_TYPE_EXISTS_DATA = '字典类型存在数据'; // 关闭
 
+    const PERMISSION_NAME_DUPLICATE = '权限标识重复';
+    const PERMISSION_NAME_NOT_EXISTS = '权限标识不存在';
 }

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

@@ -55,9 +55,9 @@ class MenuController extends Controller
      */
     public function store(MenuRequest $request): JsonResponse
     {
-        $params = $request->safe()->only(['name','type','sort','parentId','path','icon','component','componentName','status','visible','keepAlive','alwaysShow']);
-        $permissions = $request->post('permission', '');
-        $res = $this->menuService->createMenu($params, explode('|', $permissions));
+        $params = $request->safe()->only(['name', 'permission', 'type', 'sort', 'parentId', 'path', 'icon', 'component', 'componentName', 'status', 'visible', 'keepAlive', 'alwaysShow']);
+//        $permissions = $request->post('permission', '');
+        $res = $this->menuService->createMenu($params);
         return self::success($res);
     }
 

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

@@ -25,9 +25,11 @@ class RoleController extends Controller
         return self::success($res);
     }
 
-    public function show($id)
+    public function show(int $id)
     {
         // 处理显示单个用户的逻辑
+        $res = $this->roleService->getRole($id);
+        return self::success($res);
     }
 
     public function create()

+ 70 - 41
app/Http/Services/Backend/Server/System/MenuService.php

@@ -8,11 +8,13 @@
 
 namespace App\Http\Services\Backend\Server\System;
 
+use App\Enums\Common\ErrorMessage;
 use App\Enums\Common\Status;
 use App\Enums\System\MenuType;
 use App\Exceptions\ApiException;
 use App\Http\Services\Service;
 use App\Models\System\Menu;
+use App\Models\System\Role;
 use Exception;
 use Illuminate\Support\Facades\DB;
 use Spatie\Permission\Guard;
@@ -27,7 +29,7 @@ class MenuService extends Service
     /**
      * @throws ApiException
      */
-    public function createMenu(array $data, array $permissions)
+    public function createMenu(array $data)
     {
         // 校验父菜单存在
         self::validateParentMenu($data['parentId'], null);
@@ -35,43 +37,57 @@ class MenuService extends Service
         self::validateMenu($data['parentId'], $data['name'], null);
 
         // 校验权限标识
+        $permissions = isset($data['permission']) ? self::convertPermissions($data['permission']) : [];
         $this->validatePermissions($permissions);
 
         // 插入数据库
         $menu = self::toModel($data, Menu::class);
-
         self::initMenuProperty($menu);
 
         DB::beginTransaction();
         try {
-            $menu_id = $menu->create($menu->getAttributes())->id;
-            $this->createPermissions($permissions, $menu_id);
+            $menu = $menu->create($menu->getAttributes());
+            self::createPermissions($permissions);
+            self::syncMenuHasPermissions($menu, $permissions);
             DB::commit();
-        }
-        catch (Exception){
+            return $menu->id;
+        } catch (Exception) {
             DB::rollBack();
             self::error('添加失败');
         }
-        return $menu_id;
+
     }
 
     /**
      * @throws ApiException
      */
-    public function updateMenu($params): void
+    public function updateMenu($data): void
     {
         // 校验更新的菜单是否存在
-        !self::isExistMenu($params['id']) && self::error('MENU_NOT_EXISTS', Response::HTTP_UNPROCESSABLE_ENTITY);
+        !self::isExistMenu($data['id']) && self::error('MENU_NOT_EXISTS', Response::HTTP_UNPROCESSABLE_ENTITY);
         // 校验父菜单存在
-        self::validateParentMenu($params['parentId'], $params['id']);
+        self::validateParentMenu($data['parentId'], $data['id']);
         // 校验菜单(自己)
-        self::validateMenu($params['parentId'], $params['name'], $params['id']);
+        self::validateMenu($data['parentId'], $data['name'], $data['id']);
 
-        // 更新到数据库
-        $menu = self::toModel($params, Menu::class);
+        // 校验权限标识
+        $permissions = isset($data['permission']) ? self::convertPermissions($data['permission']) : [];
+        $this->validatePermissions($permissions, $data['id']);
 
+        // 更新到数据库
+        $menu = self::toModel($data, Menu::class);
         self::initMenuProperty($menu);
-        $menu->update($menu->getAttributes());
+        DB::beginTransaction();
+        try {
+            $menu->update($menu->getAttributes());
+            self::detachMenuHasPermissions($menu);
+            self::createPermissions($permissions);
+            self::syncMenuHasPermissions($menu, $permissions);
+            DB::commit();
+        } catch (Exception) {
+            DB::rollBack();
+            self::error('修改失败');
+        }
     }
 
     /**
@@ -81,14 +97,19 @@ class MenuService extends Service
     {
         // 校验是否还有子菜单
         self::validateChildrenMenu($id);
-
         // 校验删除的菜单是否存在
         !self::isExistMenu($id) && self::error('MENU_NOT_EXISTS', Response::HTTP_UNPROCESSABLE_ENTITY);
-
         $menu = self::toModel(['id' => $id], Menu::class);
-
-        // 标记删除
-        return $menu->delete();
+        try {
+            self::detachMenuHasPermissions($menu);
+            // 标记删除
+            $res = $menu->delete();
+            DB::commit();
+            return $res;
+        } catch (Exception) {
+            DB::rollBack();
+            self::error('删除失败');
+        }
     }
 
     public function getMenu($id): array
@@ -159,46 +180,54 @@ class MenuService extends Service
         $menu->id !== $id && self::error('MENU_NAME_DUPLICATE', Response::HTTP_UNPROCESSABLE_ENTITY);
     }
 
+    protected static function convertPermissions(string $permission): array
+    {
+        if (empty($permission)) return [];
+        return collect(explode('|', $permission))->map(function ($item) {
+            return trim($item);
+        })->all();
+    }
+
     /**
      * @throws ApiException
      */
     protected function validatePermissions(array $permissions, int $menu_id = null): void
     {
         if (empty($permissions)) return;
-        $isExists = Permission::query()->whereIn('name', $permissions)->where('guard_name', Guard::getDefaultName(static::class))->exists();
-        $isExists && empty($menu_id) && self::error('权限标识重复');
+        $isExistsPermissions = Permission::query()->whereIn('name', $permissions)->where('guard_name', Guard::getDefaultName(static::class))->get();
+        count($isExistsPermissions) && empty($menu_id) && self::error(ErrorMessage::PERMISSION_NAME_DUPLICATE);
+        if (empty($menu_id)) return;
+        $menu = Menu::query()->find($menu_id);
+        $isHas = $menu->hasAllPermissions($isExistsPermissions);
+        !$isHas && self::error(ErrorMessage::PERMISSION_NAME_DUPLICATE);
     }
 
-    protected function createPermissions(array $permissions, int $menu_id): void
+    protected static function syncMenuHasPermissions(Menu $menu, array $permissions): void
     {
         if (empty($permissions)) return;
-        $permissionsData = [];
-        $guardName = Guard::getDefaultName(static::class);
-        $permissionQuery = Permission::query();
-        foreach ($permissions as $permission) {
-            $permissionsData[] = ['name' => $permission, 'guard_name' => $guardName];
-        }
-
-        $permissionQuery->insert($permissionsData);
-        $permissionIds = $permissionQuery->whereIn('name', $permissions)->pluck('id');
+        $permissions_ids = Permission::query()->whereIn('name', $permissions)->pluck('id');
+        empty($permissions_ids) && self::error(ErrorMessage::PERMISSION_NAME_NOT_EXISTS);;
+        $menu->permissions()->sync($permissions_ids);
+    }
 
-        $this->createMenuHasPermissions($menu_id, $permissionIds->toArray());
+    protected static function detachMenuHasPermissions(Menu $menu)
+    {
+        $permission_ids = $menu->permissions()->pluck('id');
+        Permission::query()->whereIn('id', $permission_ids)->delete();
     }
 
-    protected function createMenuHasPermissions(int $menu_id, array $permission_ids): void
+    protected static function createPermissions(array $permissions): void
     {
-        $tableNames = config('permission.table_names');
-        $menuHasPermissionsData = [];
-        $model_type = Menu::class;
-        foreach ($permission_ids as $permission_id) {
-            $menuHasPermissionsData[] = ['permission_id' => $permission_id, 'model_type' => $model_type, 'model_id' => $menu_id];
+        if (empty($permissions)) return;
+        foreach ($permissions as $permissionName) {
+            Permission::create(['name' => $permissionName]);
         }
-        DB::table($tableNames['model_has_permissions'])->insert($menuHasPermissionsData);
+//        $menu->givePermissionTo($permissions);
 
-        // 存在权限并清空权限缓存
-//        Cache::forget(config('permission.cache.key'));
+//        $menu->flushPermissionCache();
     }
 
+
     /**
      * 初始化菜单的通用属性。
      * <p>

+ 39 - 20
app/Http/Services/Backend/Server/System/RoleService.php

@@ -20,6 +20,22 @@ use Symfony\Component\HttpFoundation\Response;
 
 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
+    {
+        $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']);
+        return ['list' => $rolePage->items(), 'total' => $rolePage->total()];
+    }
+
+    public function getRole(int $id): array
+    {
+        return Role::query()->where('guard_name', Guard::getDefaultName(static::class))->select($this->selectColumn)->find($id)->toArray();
+    }
 
     /**
      * @throws ApiException
@@ -29,14 +45,14 @@ class RoleService extends Service
         $params['guard_name'] = $params['guard_name'] ?? Guard::getDefaultName(static::class);
 
         // 1. 校验角色
-        self::validateRoleDuplicate($params['name'], $params['guard_name']);;
-        $params['data_scope'] = DataScope::ALL;
+        self::validateRoleDuplicate($params['name'], $params['code'], $params['guard_name']);;
+//        $params['data_scope'] = DataScope::ALL;
+        $params['type'] = $params['type'] ?? 1;
         // 2. 插入到数据库
-        $role = Role::create($params);
+        $role = self::toModel($params, Role::class);
+        return $role->create($role->getAttributes())->id;
 
         // 3. 记录操作日志上下文
-
-        return $role->id;
     }
 
     /**
@@ -46,11 +62,12 @@ class RoleService extends Service
     {
         $params['guard_name'] = $params['guard_name'] ?? Guard::getDefaultName(static::class);
         // 校验是否可以更新
-        $role = self::validateRoleForUpdate($id);
+//        $role = self::validateRoleForUpdate($id);
         // 校验角色名称是否重复
         self::validateRoleDuplicate($params['name'], $params['guard_name'], $id);
         // 更新到数据库
-        return $role->update([...$params, 'id' => $id]);
+        $role = self::toModel([...$params, 'id' => $id], Role::class);
+        return $role->update($role->getAttributes());
         // 记录操作日志上下文
 
     }
@@ -58,25 +75,18 @@ class RoleService extends Service
     public function deleteRole($id): ?bool
     {
         // 1. 校验是否可以更新
-        $role = self::validateRoleForUpdate($id);
+//        $role = self::validateRoleForUpdate($id);
+        $role = self::toModel(['id' => $id], Role::class);
 
         // 2.1 标记删除
-        return $role->delete();
         // 2.2 删除相关数据
 //        permissionService.processRoleDeleted(id);
-
+        $role->syncPermissions([]);
+        $role->flushPermissionCache();
         // 3. 记录操作日志上下文
 //        LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(role, RoleSaveReqVO.class));
 //        LogRecordContext.putVariable("role", role);
-    }
-
-    public function getRoleList($data): array
-    {
-        $role = Role::query();
-        isset($data['name']) && $role->whereLike('name', "%{$data['name']}%");
-        isset($data['status']) && $role->where('status', $data['status']);
-        $rolePage = $role->orderBy('sort')->paginate($data['pageSize'], ['*'], 'page', $data['pageNo']);
-        return ['list' => $rolePage->items(), 'total' => $rolePage->total()];
+        return $role->delete();
     }
 
 //    public function getRolePermissions($id)
@@ -96,7 +106,7 @@ class RoleService extends Service
      * @param int $id 角色编号
      * @throws ApiException
      */
-    public static function validateRoleDuplicate(string $name, string $guard_name, int $id = 0): void
+    public static function validateRoleDuplicate(string $name, string $code, string $guard_name, int $id = 0): void
     {
         // 0. 超级管理员,不允许创建
 //    if (RoleCodeEnum.isSuperAdmin(code)) {
@@ -107,6 +117,8 @@ class RoleService extends Service
         $role = self::selectByName($name, $guard_name);
         $role && $role->id !== $id && self::error('ROLE_NAME_DUPLICATE', Response::HTTP_UNPROCESSABLE_ENTITY);
 
+        $role = self::selectByCode($code, $guard_name);
+        $role && $role->id !== $id && self::error('ROLE_CODE_DUPLICATE', Response::HTTP_UNPROCESSABLE_ENTITY);
     }
 
     public static function validateRoleForUpdate($id): Role
@@ -129,4 +141,11 @@ class RoleService extends Service
         return Role::query()->where($attributes)->first();
     }
 
+    protected static function selectByCode($code, $guard_name = null)
+    {
+        $attributes = ['code' => $code];
+        $attributes['guard_name'] = $guard_name ?? config('auth.defaults.guard');
+        return Role::query()->where($attributes)->first();
+    }
+
 }

+ 2 - 1
app/Http/Services/Service.php

@@ -12,9 +12,11 @@ use App\Exceptions\ApiException;
 use App\Models\System\Menu;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Str;
+use Spatie\Permission\Guard;
 
 class Service
 {
+    protected string $guard_name = 'web';
     protected static function toModel($attributes, $class)
     {
         $classInstance = app($class);
@@ -28,7 +30,6 @@ class Service
         return $classInstance;
     }
 
-
     /**
      * @throws ApiException
      */

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

@@ -2,20 +2,20 @@
 
 namespace App\Models\System;
 
-use App\Exceptions\ApiException;
 use Illuminate\Database\Eloquent\Model;
-use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
-use Spatie\Permission\Guard;
 use Spatie\Permission\Traits\HasPermissions;
-use Symfony\Component\HttpFoundation\Response;
+use Spatie\Permission\Traits\HasRoles;
+use Spatie\Permission\Traits\RefreshesPermissionCache;
 
 class Menu extends Model
 {
-//    use HasPermissions;
+    use HasRoles, HasPermissions, RefreshesPermissionCache;
 
     protected $table = 'system_menus';
 
+    protected string $guard = 'web';
+
     protected $attributes = [];
 
     protected $guarded = [];

+ 8 - 2
database/seeders/SystemDictTableSeeder.php

@@ -13,17 +13,23 @@ 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' => 110, 'name' => '角色类型', 'type' => 'system_role_type', 'creator' => '系统']);
 
         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_type')->insert(['id' => 110, 'name' => '角色类型', 'type' => 'system_role_type', 'creator' => '系统']);
 
+        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_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' => '系统']);
 
+
     }
 }

+ 19 - 1
database/seeders/SystemMenusTableSeeder.php

@@ -26,6 +26,16 @@ class SystemMenusTableSeeder extends Seeder
         DB::table('system_menus')->insert(['id' => 150, 'name' => '字典管理', 'type' => 2, 'parent_id' => 1, 'path' => 'dict', 'icon' => 'ep:collection', 'component' => 'system/dict/index', 'component_name' => 'SystemDictType', 'creator' => '系统']);
 
         // 按钮
+        // 角色管理
+        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' => 121, 'name' => '菜单查询', 'type' => 3, 'parent_id' => 120, 'creator' => '系统']);
         DB::table('system_menus')->insert(['id' => 122, 'name' => '菜单新增', 'type' => 3, 'parent_id' => 120, 'creator' => '系统']);
@@ -40,8 +50,16 @@ class SystemMenusTableSeeder extends Seeder
 
 
         // 角色菜单
-        // 菜单管理
+        // 系统管理
         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]);

+ 17 - 5
database/seeders/SystemPermissionsTableSeeder.php

@@ -23,11 +23,23 @@ class SystemPermissionsTableSeeder extends Seeder
         DB::table('system_permissions')->insert(['name' => 'system:user:import']);
         DB::table('system_permissions')->insert(['name' => 'system:user:update-password']);
 
-        DB::table('system_permissions')->insert(['name' => 'system:role:query']);
-        DB::table('system_permissions')->insert(['name' => 'system:role:create']);
-        DB::table('system_permissions')->insert(['name' => 'system:role:update']);
-        DB::table('system_permissions')->insert(['name' => 'system:role:delete']);
-        DB::table('system_permissions')->insert(['name' => 'system:role:export']);
+        DB::table('system_permissions')->insert(['id' => 111,'name' => 'system:role:query']);
+        DB::table('system_permissions')->insert(['id' => 112,'name' => 'system:role:create']);
+        DB::table('system_permissions')->insert(['id' => 113,'name' => 'system:role:update']);
+        DB::table('system_permissions')->insert(['id' => 114,'name' => 'system:role:delete']);
+        DB::table('system_permissions')->insert(['id' => 115,'name' => 'system:role:export']);
+        DB::table('system_permissions')->insert(['id' => 116,'name' => 'system:permission:assign-role-menu']);
+        DB::table('system_permissions')->insert(['id' => 117,'name' => 'system:permission:assign-role-data-scope']);
+        DB::table('system_permissions')->insert(['id' => 118,'name' => 'system:permission:assign-user-role']);
+
+        DB::table('model_has_permissions')->insert(['permission_id' => 111,'model_type' => Menu::class, 'model_id' => 111]);
+        DB::table('model_has_permissions')->insert(['permission_id' => 112,'model_type' => Menu::class, 'model_id' => 112]);
+        DB::table('model_has_permissions')->insert(['permission_id' => 113,'model_type' => Menu::class, 'model_id' => 113]);
+        DB::table('model_has_permissions')->insert(['permission_id' => 114,'model_type' => Menu::class, 'model_id' => 114]);
+        DB::table('model_has_permissions')->insert(['permission_id' => 115,'model_type' => Menu::class, 'model_id' => 115]);
+        DB::table('model_has_permissions')->insert(['permission_id' => 116,'model_type' => Menu::class, 'model_id' => 116]);
+        DB::table('model_has_permissions')->insert(['permission_id' => 117,'model_type' => Menu::class, 'model_id' => 117]);
+        DB::table('model_has_permissions')->insert(['permission_id' => 118,'model_type' => Menu::class, 'model_id' => 118]);
 
         DB::table('system_permissions')->insert(['id' => 121,'name' => 'system:menu:query']);
         DB::table('system_permissions')->insert(['id' => 122,'name' => 'system:menu:create']);

+ 10 - 0
database/seeders/SystemRoleHasPermissionsTableSeeder.php

@@ -14,6 +14,16 @@ class SystemRoleHasPermissionsTableSeeder extends Seeder
     public function run(): void
     {
         // 菜单权限
+        // 角色管理
+        DB::table('role_has_permissions')->insert(['permission_id' => 111, 'role_id' => 1]);
+        DB::table('role_has_permissions')->insert(['permission_id' => 112, 'role_id' => 1]);
+        DB::table('role_has_permissions')->insert(['permission_id' => 113, 'role_id' => 1]);
+        DB::table('role_has_permissions')->insert(['permission_id' => 114, 'role_id' => 1]);
+        DB::table('role_has_permissions')->insert(['permission_id' => 115, 'role_id' => 1]);
+        DB::table('role_has_permissions')->insert(['permission_id' => 116, 'role_id' => 1]);
+        DB::table('role_has_permissions')->insert(['permission_id' => 117, 'role_id' => 1]);
+        DB::table('role_has_permissions')->insert(['permission_id' => 118, 'role_id' => 1]);
+        // 菜单管理
         DB::table('role_has_permissions')->insert(['permission_id' => 121, 'role_id' => 1]);
         DB::table('role_has_permissions')->insert(['permission_id' => 122, 'role_id' => 1]);
         DB::table('role_has_permissions')->insert(['permission_id' => 123, 'role_id' => 1]);