store-manage/database/seeders/AdminPermissionSeeder.php

293 lines
11 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Slowlyo\OwlAdmin\Models\AdminMenu;
use Slowlyo\OwlAdmin\Models\AdminPermission;
class AdminPermissionSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
AdminMenu::truncate();
AdminPermission::truncate();
$data = [
/*
|--------------------------------------------------------------------------
| 主页
|--------------------------------------------------------------------------
*/
'home' => [
'name' => '主页',
'icon' => 'line-md:home-twotone-alt',
'uri' => '/dashboard',
'children' => [],
],
/*
|--------------------------------------------------------------------------
| 门店管理
|--------------------------------------------------------------------------
*/
'store' => [
'name' => '门店管理',
'icon' => 'material-symbols:store-rounded',
'uri' => '/store',
'children' => [
'stores' => [
'name' => '门店管理',
'icon' => '',
'uri' => '/store/stores',
'resource' => true,
],
'employees' => [
'name' => '店员管理',
'icon' => '',
'uri' => '/store/employees',
'resource' => true,
],
'categories' => [
'name' => '门店分类',
'icon' => '',
'uri' => '/store/categories?parent_key=store_category',
'resource' => false,
],
'levels' => [
'name' => '门店等级',
'icon' => '',
'uri' => '/store/levels?parent_key=store_levels',
'resource' => false,
],
'business' => [
'name' => '经营类别',
'icon' => '',
'uri' => '/store/business?parent_key=store_business',
'resource' => false,
],
'devices' => [
'name' => '彩票机管理',
'icon' => '',
'uri' => '/store/devices',
'resource' => true,
],
'lottery-types' => [
'name' => '彩种类型',
'icon' => '',
'uri' => '/store/lottery-types?parent_key=lottery_type',
'resource' => false,
],
],
],
/*
|--------------------------------------------------------------------------
| 人事管理
|--------------------------------------------------------------------------
*/
'hr' => [
'name' => '人事管理',
'icon' => 'flowbite:user-settings-solid',
'uri' => '/hr',
'children' => [
'employees' => [
'name' => '员工管理',
'icon' => '',
'uri' => '/hr/employees',
'resource' => true,
'children' => [
'leave' => '离职',
],
],
'jobs' => [
'name' => '职位管理',
'icon' => '',
'uri' => '/hr/jobs?parent_key=job',
'resource' => false,
],
'rests' => [
'name' => '休息管理',
'icon' => '',
'uri' => '/hr/rests',
'resource' => ['list', 'create', 'delete'],
],
'signs' => [
'name' => '考勤打卡',
'icon' => '',
'uri' => '/hr/signs',
'resource' => ['list', 'view'],
]
],
],
/*
|--------------------------------------------------------------------------
| 财务报表
|--------------------------------------------------------------------------
*/
'finance' => [
'name' => '财务报表',
'icon' => 'material-symbols:finance-mode',
'uri' => '/finance',
'children' => [
'ledgers' => [
'name' => '上报数据',
'icon' => 'mdi:database',
'uri' => '/finance/ledgers',
'resource' => ['list', 'update', 'view'],
'children' => [],
],
],
],
/*
|--------------------------------------------------------------------------
| 系统管理
|--------------------------------------------------------------------------
*/
'system' => [
'name' => '系统管理',
'icon' => 'material-symbols:settings-outline',
'uri' => '/system',
'children' => [
'admin_users' => [
'name' => '账号管理',
'icon' => 'ph:user-gear',
'uri' => '/system/admin_users',
'resource' => ['list', 'create', 'update', 'delete'],
'children' => ['change_password' => '修改密码'],
],
'admin_roles' => [
'name' => '角色管理',
'icon' => 'carbon:user-role',
'uri' => '/system/admin_roles',
'resource' => ['list', 'create', 'update', 'delete'],
'children' => [
'set_menus' => '设置菜单',
'set_permissions' => '设置权限',
],
],
'admin_permissions' => [
'name' => '权限管理',
'icon' => 'fluent-mdl2:permissions',
'uri' => '/system/admin_permissions',
'resource' => ['list', 'create', 'update', 'delete'],
'children' => [],
],
'admin_menus' => [
'name' => '菜单管理',
'icon' => 'ant-design:menu-unfold-outlined',
'uri' => '/system/admin_menus',
'resource' => ['list', 'create', 'update', 'delete'],
'children' => [],
],
'settings' => [
'name' => '系统设置',
'icon' => 'akar-icons:settings-horizontal',
'uri' => '/system/settings',
'resource' => true,
'children' => [],
],
'keywords' => [
'name' => '数据字典',
'icon' => 'ph:codesandbox-logo-light',
'uri' => '/system/keywords',
'resource' => ['list', 'create', 'update', 'delete'],
'children' => [],
],
'workflows' => [
'name' => '审核流程',
'icon' => '',
'uri' => '/system/workflows',
'resource' => true,
],
],
],
];
$this->handleAdminMenus($data);
$this->handleAdminPermissions($data);
}
public function handleAdminMenus(array $data, ?AdminMenu $parent = null): void
{
$sort = 0;
foreach ($data as $slug => $node) {
if (! is_array($node) || ! array_key_exists('uri', $node)) {
continue;
}
$sort++;
/** @var \Slowlyo\OwlAdmin\Models\AdminMenu */
$menu = AdminMenu::updateOrCreate([
'slug' => ($parent->slug ?? 'admin').'.'.$slug,
], [
'parent_id' => $parent->id ?? 0,
'order' => $sort,
'title' => $node['name'],
'icon' => $node['icon'],
'url' => $node['uri'],
'url_type' => $node['uri_type'] ?? 1,
'visible' => $node['visible'] ?? 1,
'is_home' => $node['is_home'] ?? 0,
'is_full' => $node['is_full'] ?? 0,
]);
$this->handleAdminMenus($node['children'] ?? [], $menu);
}
}
protected function handleAdminPermissions(array $data, ?AdminPermission $parent = null)
{
foreach ($data as $slug => $node) {
$permission = AdminPermission::updateOrCreate([
'slug' => ($parent->slug ?? 'admin').'.'.$slug,
], [
'parent_id' => $parent->id ?? 0,
'name' => is_array($node) ? $node['name'] : $node,
]);
if (! is_array($node)) {
continue;
}
// 资源路由权限
if (array_key_exists('resource', $node)) {
$resourceAbilities = [];
if (is_array($node['resource'])) {
$resourceAbilities = $node['resource'];
} elseif ($node['resource'] === true) {
$resourceAbilities = array_keys($this->resourceAbilityMap());
}
foreach ($resourceAbilities as $resourceAbility) {
AdminPermission::updateOrCreate([
'slug' => $permission->slug.'.'.$resourceAbility,
], [
'parent_id' => $permission->id,
'name' => $this->resourceAbilityMap()[$resourceAbility],
]);
}
}
$this->handleAdminPermissions($node['children'] ?? [], $permission);
}
}
protected function resourceAbilityMap(): array
{
return [
'list' => '列表',
'create' => '新增',
'update' => '编辑',
'delete' => '删除',
'view' => '查看',
];
}
}