private async Task SeedSaasMenuAsync(Layout layout, Data data)
        {
            var saasMenu = await SeedMenuAsync(
                layout,
                data,
                "saas",
                "/saas",
                CodeNumberGenerator.CreateCode(3),
                layout.Path,
                "Saas",
                "",
                "Saas",
                null,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "saas" },
                { "icon", "saas" },
                { "alwaysShow", true }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "editions",
                "editions",
                CodeNumberGenerator.AppendCode(saasMenu.Code, CodeNumberGenerator.CreateCode(1)),
                "views/admin/edition/index.vue",
                "Manage Editions",
                "",
                "Manage Editions",
                saasMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "editions" },
                { "icon", "editions" }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "tenants",
                "tenants",
                CodeNumberGenerator.AppendCode(saasMenu.Code, CodeNumberGenerator.CreateCode(2)),
                "views/admin/tenants/index.vue",
                "Manage Tenants",
                "",
                "Manage Tenants",
                saasMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "tenants" },
                { "icon", "tenants" }
            },
                new string[] { "admin" });
        }
        private async Task SeedContainerMenuAsync(Layout layout, Data data)
        {
            var containerRoot = await SeedMenuAsync(
                layout,
                data,
                "container",
                "/container",
                CodeNumberGenerator.CreateCode(6),
                layout.Path,
                "Container",
                "",
                "Manage Container",
                null,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "container" },
                { "icon", "container" },
                { "alwaysShow", true }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "layouts",
                "layouts",
                CodeNumberGenerator.AppendCode(containerRoot.Code, CodeNumberGenerator.CreateCode(1)),
                "views/container/layouts/index.vue",
                "Manage Layouts",
                "",
                "Manage Layouts",
                containerRoot.Id,
                containerRoot.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "layouts" },
                { "icon", "layout" }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "menus",
                "menus",
                CodeNumberGenerator.AppendCode(containerRoot.Code, CodeNumberGenerator.CreateCode(2)),
                "views/container/menus/index.vue",
                "Manage Menus",
                "",
                "Manage Menus",
                containerRoot.Id,
                containerRoot.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "menus" },
                { "icon", "menu" }
            },
                new string[] { "admin" });
        }
Exemple #3
0
        public virtual async Task <string> GetNextChildCodeAsync(Guid?parentId)
        {
            var lastChild = await GetLastChildOrNullAsync(parentId);

            if (lastChild != null)
            {
                return(CodeNumberGenerator.CalculateNextCode(lastChild.Code));
            }

            var parentCode = parentId != null
                ? await GetCodeOrDefaultAsync(parentId.Value)
                : null;

            return(CodeNumberGenerator.AppendCode(
                       parentCode,
                       CodeNumberGenerator.CreateCode(1)
                       ));
        }
        private async Task SeedOssManagementMenuAsync(Layout layout, Data data)
        {
            var ossManagementMenu = await SeedMenuAsync(
                layout,
                data,
                "oss-management",
                "/oss-management",
                CodeNumberGenerator.CreateCode(8),
                layout.Path,
                "Manage Object Storage",
                "/oss-manager",
                "Manage Object Storage",
                null,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "oss-management" },
                { "icon", "file-system" },
                { "alwaysShow", true },
                { "roles", new string[] { "AbpOssManagement.Container", "AbpOssManagement.OssObject" } },
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "oss-manager",
                "oss-manager",
                CodeNumberGenerator.AppendCode(ossManagementMenu.Code, CodeNumberGenerator.CreateCode(1)),
                "views/oss-management/index.vue",
                "Manage Oss Object",
                "",
                "Manage Oss Object",
                ossManagementMenu.Id,
                ossManagementMenu.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "oss-objects" },
                { "icon", "file-system" },
                { "roles", new string[] { "AbpOssManagement.OssObject" } }
            },
                new string[] { "admin" });
        }
        private async Task SeedHomeMenuAsync(Layout layout, Data data)
        {
            var adminMenu = await SeedMenuAsync(
                layout,
                data,
                "home",
                "/",
                CodeNumberGenerator.CreateCode(1),
                layout.Path,
                "Home",
                "/dashboard",
                "Home",
                null,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "home" },
                { "icon", "home" },
                { "alwaysShow", true }
            },
                // isPublic: true,
                isPublic : false); // 首页应该是共有的页面

            await SeedMenuAsync(
                layout,
                data,
                "dashboard",
                "dashboard",
                CodeNumberGenerator.AppendCode(adminMenu.Code, CodeNumberGenerator.CreateCode(1)),
                "views/dashboard/index.vue",
                "Dashboard",
                "",
                "Dashboard",
                adminMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "dashboard" },
                { "icon", "dashboard" }
            },
                isPublic : false);
        }
        public virtual async Task <DataDto> CreateAsync(DataCreateDto input)
        {
            var data = await DataRepository.FindByNameAsync(input.Name);

            if (data != null)
            {
                throw new UserFriendlyException(L["DuplicateData", input.Name]);
            }

            string code     = string.Empty;
            var    children = await DataRepository.GetChildrenAsync(input.ParentId);

            if (children.Any())
            {
                var lastChildren = children.OrderBy(x => x.Code).FirstOrDefault();
                code = CodeNumberGenerator.CalculateNextCode(lastChildren.Code);
            }
            else
            {
                var parentData = input.ParentId != null
                ? await DataRepository.GetAsync(input.ParentId.Value)
                : null;

                code = CodeNumberGenerator.AppendCode(parentData?.Code, CodeNumberGenerator.CreateCode(1));
            }

            data = new Data(
                GuidGenerator.Create(),
                input.Name,
                code,
                input.DisplayName,
                input.Description,
                input.ParentId,
                CurrentTenant.Id
                );

            data = await DataRepository.InsertAsync(data);

            await CurrentUnitOfWork.SaveChangesAsync();

            return(ObjectMapper.Map <Data, DataDto>(data));
        }
        private async Task <DataItem> SeedUIFrameworkDataAsync(Guid?tenantId)
        {
            var data = await DataDictionaryDataSeeder
                       .SeedAsync(
                "UI Framewark",
                CodeNumberGenerator.CreateCode(2),
                "UI框架",
                "UI Framewark",
                null,
                tenantId,
                true);

            data.AddItem(
                GuidGenerator,
                "Vue Vben Admin",
                "Vue Vben Admin",
                "Vue Vben Admin",
                Datas.ValueType.String,
                "Vue Vben Admin",
                isStatic: true);

            return(data.FindItem("Vue Vben Admin"));
        }
        private async Task <Data> SeedLayoutDataAsync(Guid?tenantId)
        {
            var data = await DataDictionaryDataSeeder
                       .SeedAsync(
                "Vben Admin Layout",
                CodeNumberGenerator.CreateCode(3),
                "Vben Admin布局约束",
                "Vben Admin Layout Meta Dictionary",
                null,
                tenantId,
                true);

            data.AddItem(
                GuidGenerator,
                "hideMenu",
                "不在菜单显示",
                "false",
                Datas.ValueType.Boolean,
                "当前路由不在菜单显示",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "icon",
                "图标",
                "",
                Datas.ValueType.String,
                "图标,也是菜单图标",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "currentActiveMenu",
                "当前激活的菜单",
                "",
                Datas.ValueType.String,
                "用于配置详情页时左侧激活的菜单路径",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "ignoreKeepAlive",
                "KeepAlive缓存",
                "false",
                Datas.ValueType.Boolean,
                "是否忽略KeepAlive缓存",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "frameSrc",
                "IFrame地址",
                "",
                Datas.ValueType.String,
                "内嵌iframe的地址",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "transitionName",
                "路由切换动画",
                "",
                Datas.ValueType.String,
                "指定该路由切换的动画名",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "roles",
                "可以访问的角色",
                "",
                Datas.ValueType.Array,
                "可以访问的角色,只在权限模式为Role的时候有效",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "title",
                "路由标题",
                "",
                Datas.ValueType.String,
                "路由title 一般必填",
                false,
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "carryParam",
                "在tab页显示",
                "false",
                Datas.ValueType.Boolean,
                "如果该路由会携带参数,且需要在tab页上面显示。则需要设置为true",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "hideBreadcrumb",
                "隐藏面包屑",
                "false",
                Datas.ValueType.Boolean,
                "隐藏该路由在面包屑上面的显示",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "ignoreAuth",
                "忽略权限",
                "false",
                Datas.ValueType.Boolean,
                "是否忽略权限,只在权限模式为Role的时候有效",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "hideChildrenInMenu",
                "隐藏所有子菜单",
                "false",
                Datas.ValueType.Boolean,
                "隐藏所有子菜单",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "hideTab",
                "不在标签页显示",
                "false",
                Datas.ValueType.Boolean,
                "当前路由不在标签页显示",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "affix",
                "固定标签页",
                "false",
                Datas.ValueType.Boolean,
                "是否固定标签页",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "frameFormat",
                "格式化IFrame",
                "false",
                Datas.ValueType.Boolean,
                "扩展的格式化frame,{token}: 在打开的iframe页面传递token请求头");

            return(data);
        }
        private async Task <Data> SeedDefaultDataDictionaryAsync(Guid?tenantId)
        {
            var data = await DataDictionaryDataSeeder
                       .SeedAsync(
                "Layout",
                CodeNumberGenerator.CreateCode(1),
                "Vue Admin Layout Meta Dictionary",
                "Vue Admin Layout Meta Dictionary",
                null,
                tenantId);

            data.AddItem(
                GuidGenerator,
                "roles", // TODO: 是否需要把这一项写入到预置数据?
                "roles",
                "",
                Datas.ValueType.Array,
                "will control the page roles (allow setting multiple roles)");
            data.AddItem(
                GuidGenerator,
                "title",
                "title",
                "component",
                Datas.ValueType.String,
                "the name showed in subMenu and breadcrumb (recommend set)");
            data.AddItem(
                GuidGenerator,
                "icon",
                "icon",
                "icon",
                Datas.ValueType.String,
                "the icon showed in the sidebar");
            data.AddItem(
                GuidGenerator,
                "hidden",
                "hidden",
                "false",
                Datas.ValueType.Boolean,
                "if true, this route will not show in the sidebar (default is false)");
            data.AddItem(
                GuidGenerator,
                "alwaysShow",
                "alwaysShow",
                "false",
                Datas.ValueType.Boolean,
                "if true, will always show the root menu (default is false)");
            data.AddItem(
                GuidGenerator,
                "breadcrumb",
                "breadcrumb",
                "true",
                Datas.ValueType.Boolean,
                "if false, the item will be hidden in breadcrumb (default is true)");
            data.AddItem(
                GuidGenerator,
                "noCache",
                "noCache",
                "false",
                Datas.ValueType.Boolean,
                "if true, the page will not be cached (default is false)");
            data.AddItem(
                GuidGenerator,
                "affix",
                "affix",
                "false",
                Datas.ValueType.Boolean,
                "if true, the tag will affix in the tags-view");
            data.AddItem(
                GuidGenerator,
                "activeMenu",
                "activeMenu",
                "",
                Datas.ValueType.String,
                "if set path, the sidebar will highlight the path you set");

            return(data);
        }
        private async Task SeedLocalizationManagementMenuAsync(Layout layout, Data data)
        {
            var localizationManagementMenu = await SeedMenuAsync(
                layout,
                data,
                "localization-management",
                "/localization-management",
                CodeNumberGenerator.CreateCode(9),
                layout.Path,
                "Manage Localization",
                "/localization",
                "Manage Localization",
                null,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "localization" },
                { "icon", "localization" },
                { "alwaysShow", true },
                { "roles", new string[] { "LocalizationManagement.Resource", "LocalizationManagement.Language", "LocalizationManagement.Text" } },
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "resource",
                "resource",
                CodeNumberGenerator.AppendCode(localizationManagementMenu.Code, CodeNumberGenerator.CreateCode(1)),
                "views/localization-management/resources/index.vue",
                "Manage Resource",
                "",
                "Manage Resource",
                localizationManagementMenu.Id,
                localizationManagementMenu.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "resource" },
                { "icon", "resource" },
                { "roles", new string[] { "LocalizationManagement.Resource" } }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "language",
                "language",
                CodeNumberGenerator.AppendCode(localizationManagementMenu.Code, CodeNumberGenerator.CreateCode(2)),
                "views/localization-management/languages/index.vue",
                "Manage Language",
                "",
                "Manage Language",
                localizationManagementMenu.Id,
                localizationManagementMenu.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "language" },
                { "icon", "language" },
                { "roles", new string[] { "LocalizationManagement.Language" } }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "text",
                "text",
                CodeNumberGenerator.AppendCode(localizationManagementMenu.Code, CodeNumberGenerator.CreateCode(3)),
                "views/localization-management/texts/index.vue",
                "Manage Text",
                "",
                "Manage Text",
                localizationManagementMenu.Id,
                localizationManagementMenu.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "text" },
                { "icon", "text" },
                { "roles", new string[] { "LocalizationManagement.Text" } }
            },
                new string[] { "admin" });
        }
        private async Task SeedApiGatewayMenuAsync(Layout layout, Data data)
        {
            var apiGatewayMenu = await SeedMenuAsync(
                layout,
                data,
                "apigateway",
                "/apigateway",
                CodeNumberGenerator.CreateCode(7),
                layout.Path,
                "Manage Api Gateway",
                "/group",
                "Manage Api Gateway",
                null,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "api-gateway" },
                { "icon", "api-gateway" },
                { "alwaysShow", true },
                { "roles", new string[] { "ApiGateway.RouteGroup", "ApiGateway.Global", "ApiGateway.Route", "ApiGateway.DynamicRoute", "ApiGateway.AggregateRoute" } },
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "group",
                "group",
                CodeNumberGenerator.AppendCode(apiGatewayMenu.Code, CodeNumberGenerator.CreateCode(1)),
                "views/admin/apigateway/group.vue",
                "Manage Groups",
                "",
                "Manage Groups",
                apiGatewayMenu.Id,
                apiGatewayMenu.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "group" },
                { "icon", "group" },
                { "roles", new string[] { "ApiGateway.RouteGroup" } }
            },
                new string[] { "admin" });
            await SeedMenuAsync(
                layout,
                data,
                "global",
                "global",
                CodeNumberGenerator.AppendCode(apiGatewayMenu.Code, CodeNumberGenerator.CreateCode(2)),
                "views/admin/apigateway/global.vue",
                "Manage Globals",
                "",
                "Manage Globals",
                apiGatewayMenu.Id,
                apiGatewayMenu.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "global" },
                { "icon", "global-setting" },
                { "roles", new string[] { "ApiGateway.Global" } }
            },
                new string[] { "admin" });
            await SeedMenuAsync(
                layout,
                data,
                "route",
                "route",
                CodeNumberGenerator.AppendCode(apiGatewayMenu.Code, CodeNumberGenerator.CreateCode(3)),
                "views/admin/apigateway/route.vue",
                "Manage Routes",
                "",
                "Manage Routes",
                apiGatewayMenu.Id,
                apiGatewayMenu.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "route" },
                { "icon", "route" },
                { "roles", new string[] { "ApiGateway.Route" } }
            },
                new string[] { "admin" });
            await SeedMenuAsync(
                layout,
                data,
                "aggregate-route",
                "aggregate-route",
                CodeNumberGenerator.AppendCode(apiGatewayMenu.Code, CodeNumberGenerator.CreateCode(4)),
                "views/admin/apigateway/aggregateRoute.vue",
                "Manage Aggregate Routes",
                "",
                "Manage Aggregate Routes",
                apiGatewayMenu.Id,
                apiGatewayMenu.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "aggregate-route" },
                { "icon", "aggregate" },
                { "roles", new string[] { "ApiGateway.AggregateRoute " } }
            },
                new string[] { "admin" });
        }
        private async Task SeedAuditingMenuAsync(Layout layout, Data data)
        {
            var auditingMenu = await SeedMenuAsync(
                layout,
                data,
                "auditing",
                "/auditing",
                CodeNumberGenerator.CreateCode(5),
                layout.Path,
                "Auditing",
                "",
                "Auditing",
                null,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "auditing" },
                { "icon", "auditing" },
                { "alwaysShow", true },
                { "roles", new string[] { "AbpAuditing.AuditLog", "AbpAuditing.SecurityLog" } }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "audit-log",
                "audit-log",
                CodeNumberGenerator.AppendCode(auditingMenu.Code, CodeNumberGenerator.CreateCode(1)),
                "views/admin/auditing/audit-log/index.vue",
                "Manage AuditLog",
                "",
                "Manage AuditLog",
                auditingMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "audit-log" },
                { "icon", "audit-log" },
                { "roles", new string[] { "AbpAuditing.AuditLog" } }
            },
                new string[] { "admin" });
            await SeedMenuAsync(
                layout,
                data,
                "security-log",
                "security-log",
                CodeNumberGenerator.AppendCode(auditingMenu.Code, CodeNumberGenerator.CreateCode(2)),
                "views/admin/auditing/security-log/index.vue",
                "Manage SecurityLog",
                "",
                "Manage SecurityLog",
                auditingMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "security-log" },
                { "icon", "security-log" },
                { "roles", new string[] { "AbpAuditing.SecurityLog" } }
            },
                new string[] { "admin" });
        }
        private async Task SeedIdentityServerMenuAsync(Layout layout, Data data)
        {
            var identityServerMenu = await SeedMenuAsync(
                layout,
                data,
                "identity-server",
                "/identity-server",
                CodeNumberGenerator.CreateCode(4),
                layout.Path,
                "Identity Server",
                "",
                "Identity Server",
                null,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "identity-server" },
                { "icon", "identity-server" },
                { "alwaysShow", true },
                { "roles", new string[] { "AbpIdentityServer.Clients", "AbpIdentityServer.ApiResources", "AbpIdentityServer.IdentityResources", "AbpIdentityServer.ApiScopes" } }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "clients",
                "clients",
                CodeNumberGenerator.AppendCode(identityServerMenu.Code, CodeNumberGenerator.CreateCode(1)),
                "views/admin/identityServer/client/index.vue",
                "Manage Clients",
                "",
                "Manage Clients",
                identityServerMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "clients" },
                { "icon", "client" },
                { "roles", new string[] { "AbpIdentityServer.Clients" } }
            },
                new string[] { "admin" });
            await SeedMenuAsync(
                layout,
                data,
                "api-resources",
                "api-resources",
                CodeNumberGenerator.AppendCode(identityServerMenu.Code, CodeNumberGenerator.CreateCode(2)),
                "views/admin/identityServer/api-resources/index.vue",
                "Manage Api Resources",
                "",
                "Manage Api Resources",
                identityServerMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "api-resources" },
                { "icon", "api" },
                { "roles", new string[] { "AbpIdentityServer.ApiResources" } }
            },
                new string[] { "admin" });
            await SeedMenuAsync(
                layout,
                data,
                "identity-resources",
                "identity-resources",
                CodeNumberGenerator.AppendCode(identityServerMenu.Code, CodeNumberGenerator.CreateCode(3)),
                "views/admin/identityServer/identity-resources/index.vue",
                "Manage Identity Resources",
                "",
                "Manage Identity Resources",
                identityServerMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "identity-resources" },
                { "icon", "identity" },
                { "roles", new string[] { "AbpIdentityServer.IdentityResources" } }
            },
                new string[] { "admin" });
            await SeedMenuAsync(
                layout,
                data,
                "api-scopes",
                "api-scopes",
                CodeNumberGenerator.AppendCode(identityServerMenu.Code, CodeNumberGenerator.CreateCode(4)),
                "views/admin/identityServer/api-scopes/index.vue",
                "Manage Api Scopes",
                "",
                "Manage Api Scopes",
                identityServerMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "api-scopes" },
                { "icon", "api-scopes" },
                { "roles", new string[] { "AbpIdentityServer.ApiScopes" } }
            },
                new string[] { "admin" });
        }
        private async Task SeedAdminMenuAsync(Layout layout, Data data)
        {
            var adminMenu = await SeedMenuAsync(
                layout,
                data,
                "admin",
                "/admin",
                CodeNumberGenerator.CreateCode(2),
                layout.Path,
                "Admin",
                "",
                "Admin",
                null,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "admin" },
                { "icon", "admin" },
                { "alwaysShow", true }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "roles",
                "roles",
                CodeNumberGenerator.AppendCode(adminMenu.Code, CodeNumberGenerator.CreateCode(1)),
                "views/admin/roles/index.vue",
                "Manage Roles",
                "",
                "Manage Roles",
                adminMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "roles" },
                { "icon", "role" },
                { "roles", new string[] { "AbpIdentity.Roles" } }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "users",
                "users",
                CodeNumberGenerator.AppendCode(adminMenu.Code, CodeNumberGenerator.CreateCode(2)),
                "views/admin/users/index.vue",
                "Manage Users",
                "",
                "Manage Users",
                adminMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "users" },
                { "icon", "users" },
                { "roles", new string[] { "AbpIdentity.Users" } }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "organization-unit",
                "organization-unit",
                CodeNumberGenerator.AppendCode(adminMenu.Code, CodeNumberGenerator.CreateCode(3)),
                "views/admin/organization-unit/index.vue",
                "Manage Organization Units",
                "",
                "Manage Organization Units",
                adminMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "organization-unit" },
                { "icon", "organization-unit" },
                { "roles", new string[] { "AbpIdentity.OrganizationUnits" } }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "claim-type",
                "claim-type",
                CodeNumberGenerator.AppendCode(adminMenu.Code, CodeNumberGenerator.CreateCode(4)),
                "views/admin/claim-type/index.vue",
                "Manage Claim Types",
                "",
                "Manage Claim Types",
                adminMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "claim-type" },
                { "icon", "claim-type" },
                { "roles", new string[] { "AbpIdentity.IdentityClaimTypes" } }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "data-dictionary",
                "data-dictionary",
                CodeNumberGenerator.AppendCode(adminMenu.Code, CodeNumberGenerator.CreateCode(5)),
                "views/admin/data-dictionary/index.vue",
                "Manage Data Dictionarys",
                "",
                "Manage Data Dictionarys",
                adminMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "data-dictionary" },
                { "icon", "data-dictionary" },
                { "roles", new string[] { "Platform.DataDictionary" } }
            },
                new string[] { "admin" });

            await SeedMenuAsync(
                layout,
                data,
                "settings",
                "settings",
                CodeNumberGenerator.AppendCode(adminMenu.Code, CodeNumberGenerator.CreateCode(6)),
                "views/admin/settings/index.vue",
                "Manage Settings",
                "",
                "Manage Settings",
                adminMenu.Id,
                layout.TenantId,
                new Dictionary <string, object>()
            {
                { "title", "settings" },
                { "icon", "settings" },
                { "roles", new string[] { "AbpSettingManagement.Settings" } }
            },
                new string[] { "admin" });
        }