diff --git a/.github/instructions/list.instructions.md b/.github/instructions/list.instructions.md index 08d436e8..e07ef219 100644 --- a/.github/instructions/list.instructions.md +++ b/.github/instructions/list.instructions.md @@ -28,7 +28,7 @@ This document summarizes the rules, standards, and step-by-step instructions for ## Special File Handling Rules - **MenusData.json:** - - Never modify the `Routes` section directly. Only `MenuGroups` and `Menus` sections can be changed for menu additions or updates. All menu additions must use the platform's configuration mechanisms or be added to `MenuGroups` and `Menus` as required by platform design. + - Never modify the `Routes` section directly. Only `Modules` and `Menus` sections can be changed for menu additions or updates. All menu additions must use the platform's configuration mechanisms or be added to `Modules` and `Menus` as required by platform design. - **LanguagesData.json:** - When adding a new key, always check if the key already exists. Only add the key if it does not exist to prevent duplicates. @@ -39,7 +39,7 @@ This document summarizes the rules, standards, and step-by-step instructions for ### 1. MenusData.json -- **{Modul} menu** added as a top-level menu with `ShortName: {Modul}`. +- **{Modul} menu** added as a top-level menu with `ModuleId: {Modul}`. - **{Liste}** added as a child menu under {Modul}. ### 2. PermissionsData.json diff --git a/.github/instructions/lowcode-reference.instructions.md b/.github/instructions/lowcode-reference.instructions.md index 423d0a39..90e11053 100644 --- a/.github/instructions/lowcode-reference.instructions.md +++ b/.github/instructions/lowcode-reference.instructions.md @@ -1164,7 +1164,7 @@ soneklerini alır. | **Data Source** | `App.DataSource` | `Sas_H_DataSource` | host | `Code`, `DataSourceType`, `ConnectionString`. **İki tür kayıt bir arada:** elle tanımlanan host/harici bağlantılar ve `Code = tenant adı` olan otomatik tenant bağlantıları (Tenants ekranındaki bağlantı diyaloğu yönetir, elle dokunma). `IsTenant` ekran önce tenant kaydını, yoksa `DataSourceCode`'u kullanır — çözüm kuralı `lowcode` §9.3.3. Bağlantı dizesi koda/JSON'a yazılmaz. | | **Notifications › Types / Rules / Notifications** | `App.Notifications.NotificationTypes` · `.NotificationRules` · `.Notification` | `Sas_H_NotificationType` · `Sas_H_NotificationRule` · `Sas_H_Notification` | host | Olay bazlı bildirim (7 kanal); kural ekranındaki `CreateNotification` diyaloğu ile elle bildirim üretilir. Ayrıntı: §9.11. | | **Background Workers › Recurring Jobs / Jobs** | `App.BackgroundWorkers.RecurringJobs` · `.Jobs` | `Sas_H_BackgroundWorker` · `Sas_H_BackgroundWorker_JobFlow` | host | Cron'lu işler ve çalıştırma geçmişi (`ExecutionDate`, `Duration`, `Status`, `FailureReason`, `ExceptionDetails`). Ayrıntı: §9.10 ve bu dosyanın §11'i. | -| **Menus › Routes / Menu Group / Menu / Manager** | `App.Menus.Routes` · `.MenuGroup` · `.Menu` · `.Manager` (`/admin/menuManager`) | `Sas_H_Route` · `Sas_H_MenuGroup` · `Sas_H_Menu` | host | Menü ve route veritabanından gelir; üretilen ekranın menü kaydı buradan açılır. `Menu` ekranı ağaç düzeninin referansıdır, `Routes` yalnızca özel React sayfası eklenirken kullanılır. | +| **Menus › Routes / Module / Menu / Manager** | `App.Menus.Routes` · `.Module` · `.Menu` · `.Manager` (`/admin/menuManager`) | `Sas_H_Route` · `Sas_H_Module` · `Sas_H_Menu` | host | Menü ve route veritabanından gelir; üretilen ekranın menü kaydı buradan açılır. `Menu` ekranı ağaç düzeninin referansıdır, `Routes` yalnızca özel React sayfası eklenirken kullanılır. | | **Developer Kit › SQL Query Manager** | `App.SqlQueryManager` · `/admin/sqlQueryManager` | — | — | View/procedure/function yazma ve çalıştırma; karar sırasının 2. adımı buradan başlar. | | **Developer Kit › Custom Endpoints** | `App.DeveloperKit.CustomEndpoints` | `Sas_H_CustomEndpoint` | tenant | `Name`, `Url`, `Method`, `DataSourceCode`, `Sql`, `ParametersJson`, `PermissionsJson` — parametreli SQL'i yetkili bir HTTP ucuna çevirir. | | **Developer Kit › Dynamic Services** | `App.DeveloperKit.DynamicServices` · `/admin/developerkit/dynamic-services` | `Sas_H_DynamicService` | host | Monaco editöründe yazılan, derlenip yayınlanan C# servisi; SQL'in yetmediği iş kuralı için 3. adım. | @@ -1198,7 +1198,7 @@ Kök menü `App.Administration`. Bu menünün tabloları `Adm_T_*` — yani **ki | **Intranet › Event Type / Category / Event (+Like/Comment)** | `App.Intranet.Events.*` | `Adm_T_EventType` · `Adm_T_EventCategory` · `Adm_T_Event` · `Adm_T_EventPhoto` · `Adm_T_EventLike` · `Adm_T_EventComment` | Etkinlik yönetimi; foto ve katılımcı sayacı olan kayıt kalıbı. | | **Restrictions › Work Hour** | `App.Restrictions.WorkHour` | `Adm_T_WorkHour` | Gün bazlı çalışma saati (`Monday`…`Sunday`, `StartTime`, `EndTime`); kullanıcıya `AbpUsers.WorkHour` ile bağlanır. "Sadece mesai saatinde girilebilsin" burada çözülür. | | **Restrictions › IP Restrictions** | `App.Restrictions.IpRestrictions` | `Adm_T_IpRestriction` | `ResourceType` + `ResourceId` + `IP` — kullanıcı/rol bazlı IP kısıtı. | -| **Identity › Permission Groups / Permissions** | `Abp.Identity.PermissionGroups` · `Abp.Identity.Permissions` | `AbpPermissionGroups` · `AbpPermissions` | Yetki ağacı (tree düzeni). Yeni ekranın yetkileri burada görünür; `MenuGroup` kolonu yetkiyi modüle bağlar. | +| **Identity › Permission Groups / Permissions** | `Abp.Identity.PermissionGroups` · `Abp.Identity.Permissions` | `AbpPermissionGroups` · `AbpPermissions` | Yetki ağacı (tree düzeni). Yeni ekranın yetkileri burada görünür; `Modules` kolonu yetkiyi modüllere bağlar (pipe ile çoklu). | | **Identity › Claim Type** | `App.IdentityManagement.ClaimType` | `AbpClaimTypes` | Kullanıcıya ek alan (claim) tanımı: `ValueType`, `Regex`, `Required`, `IsStatic`. | | **Identity › Roles** | `AbpIdentity.Roles` | `AbpRoles` | Rol yönetimi + `RolesPermission` diyaloğu; yeni ekranın yetkisi role buradan verilir. | | **Identity › Users** | `AbpIdentity.Users` | `AbpUsers` | Kullanıcı yönetimi + `UsersPermission` diyaloğu, **KPI widget'ları** ve `list-form-dynamic-api/user-*` ile devredilen yazma. Kullanıcı `WorkHour`, `DepartmentId`, `JobPositionId` alanlarını taşır. | diff --git a/.github/instructions/lowcode.instructions.md b/.github/instructions/lowcode.instructions.md index 78dbcfa4..fca93aba 100644 --- a/.github/instructions/lowcode.instructions.md +++ b/.github/instructions/lowcode.instructions.md @@ -601,7 +601,7 @@ Elle dosya yazarken buraya var olan bir kaydı koyma — silme onu da götürür | Alan | Anlam | | --- | --- | | `CreateMenu` | `false` ise menü ve üst menü kaydı **hiç üretilmez**; ListForm, yetki ve dil anahtarları yine üretilir. SubGrid/parça olarak kullanılacak ekranlar için. Varsayılan `true`. | -| `MenuParentCode` / `MenuParentShortName` / `MenuParentIcon` | Üst menü; yoksa oluşturulur. | +| `MenuParentCode` / `MenuParentModuleId` / `MenuParentIcon` | Üst menü; yoksa oluşturulur. | | `MenuIcon` | React-icons adı (`FcBiohazard`, `FaBox`…). | | `MenuOrder` | Kardeşler arası sıra. | @@ -986,7 +986,7 @@ varsayılan değeri olur ve **yeni kayıtta o alanı otomatik doldurur**. "PermissionGroupName": "App.Mrp", "PermissionGroupDisplayNameEn": "MRP", "PermissionGroupDisplayNameTr": "MRP", - "MenuParentCode": "App.Mrp", "MenuParentShortName": "MRP", "MenuParentIcon": "FcFactory", + "MenuParentCode": "App.Mrp", "MenuParentModuleId": "MRP", "MenuParentIcon": "FcFactory", "MenuIcon": "FcShipped", "DataSourceCode": "Default", "DataSourceConnectionString": "", @@ -3035,7 +3035,7 @@ elle düzeltme ve wizard'ın kapsamadığı düzenlemeler içindir. | Ekran | Route | Yetki | Ne yapar | | --- | --- | --- | --- | | **Routes** | `/admin/list/App.Menus.Routes` | `App.Menus.Routes` | Fiziksel React sayfalarının route kayıtları (`Key`, `Path`, `ComponentType`, `ComponentPath`, `RouteType`, `Authority[]`) | -| **Menu Groups** | `/admin/list/App.Menus.MenuGroup` | `App.Menus.MenuGroup` | Menü grubu adları (`Erp`, `Kurs` gibi üst kümeler) | +| **Modules** | `/admin/list/App.Menus.Module` | `App.Menus.Module` | Modül adları (`Sas`, `Adm` gibi üst kümeler); kök menü `ModuleId` ile buraya bağlanır | | **Menu List** | `/admin/list/App.Menus.Menu` | `App.Menus.Menu` | Menü kayıtlarının ham listesi | | **Menu Manager** | `/admin/menuManager` | `App.Menus.Manager` | Sürükle-bırak menü ağacı; sıra ve hiyerarşi düzenleme | @@ -3049,7 +3049,7 @@ elle düzeltme ve wizard'ın kapsamadığı düzenlemeler içindir. | `Url` | Açılacak adres | | `Icon` | react-icons adı | | `Order` | Kardeşler arası sıra | -| `ShortName` | Kısa rozet (`HR`, `MRP`) — kök menülerde kullanılır | +| `ModuleId` | Kısa rozet (`HR`, `MRP`) — kök menülerde kullanılır | | `RequiredPermissionName` | Görünürlük yetkisi | | `Target` / `CssClass` / `ElementId` / `IsDisabled` | Bağlantı davranışı ve görünüm | | `UserId` / `RoleId` / `CultureName` | Kullanıcı, rol ve dil bazlı menü varyantı | diff --git a/README.md b/README.md index e206df7d..172aa8b0 100644 --- a/README.md +++ b/README.md @@ -1151,7 +1151,7 @@ Platformun kendi ekranları, menüleri, yetkileri ve dil metinleri buradadır; d derlenip yayınlanır. Yeni bir modülün nasıl kurulacağını öğrenmek için başvurulacak dosyalar: - `ListFormSeeder_Saas.cs`, `ListFormSeeder_Administration.cs` — ListForm + alan tanımları -- `MenusData.json` — `Routes`, `MenuGroups`, `Menus` +- `MenusData.json` — `Routes`, `Modules`, `Menus` - `PermissionsData.json` — yetki grupları ve tanımları - `HostData.json` — ayar/entegrasyon değerleri - `LanguagesData.json` — dil anahtarları (EN/TR) diff --git a/api/src/Sozsoft.Platform.Application.Contracts/ListForms/DynamicApi/CreateTenantFromOrderInput.cs b/api/src/Sozsoft.Platform.Application.Contracts/ListForms/DynamicApi/CreateTenantFromOrderInput.cs index 0321f20c..600b47be 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/ListForms/DynamicApi/CreateTenantFromOrderInput.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/ListForms/DynamicApi/CreateTenantFromOrderInput.cs @@ -6,5 +6,5 @@ public class CreateTenantFromOrderInput { public Guid OrderId { get; set; } public string Name { get; set; } - public string MenuGroup { get; set; } + public string Modules { get; set; } } diff --git a/api/src/Sozsoft.Platform.Application.Contracts/ListForms/DynamicApi/CreateUpdateTenantInput.cs b/api/src/Sozsoft.Platform.Application.Contracts/ListForms/DynamicApi/CreateUpdateTenantInput.cs index 076826bf..20ffaea5 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/ListForms/DynamicApi/CreateUpdateTenantInput.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/ListForms/DynamicApi/CreateUpdateTenantInput.cs @@ -27,6 +27,6 @@ public class CreateUpdateTenantInput public string FaxNumber { get; set; } public string Email { get; set; } public string Website { get; set; } - public string MenuGroup { get; set; } + public string Modules { get; set; } } diff --git a/api/src/Sozsoft.Platform.Application.Contracts/ListForms/Wizard/ListFormWizardDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/ListForms/Wizard/ListFormWizardDto.cs index d3bb5fc5..a05dd219 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/ListForms/Wizard/ListFormWizardDto.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/ListForms/Wizard/ListFormWizardDto.cs @@ -86,8 +86,8 @@ public class ListFormWizardDto /// Izin grubunun Turkce gorunen adi; ile ayni kurallara tabidir. public string PermissionGroupDisplayNameTr { get; set; } + public string MenuParentModuleId { get; set; } public string MenuParentCode { get; set; } - public string MenuParentShortName { get; set; } public string MenuParentIcon { get; set; } public string MenuIcon { get; set; } public string DataSourceCode { get; set; } diff --git a/api/src/Sozsoft.Platform.Application.Contracts/LookUpQueryValues.cs b/api/src/Sozsoft.Platform.Application.Contracts/LookUpQueryValues.cs index 0ce11bc9..293656ac 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/LookUpQueryValues.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/LookUpQueryValues.cs @@ -170,11 +170,11 @@ public static class LookupQueryValues $"FROM \"AbpPermissionGroups\" " + $"ORDER BY \"Name\";"; - public static string MenuGroupValues = + public static string ModuleValues = $"SELECT " + $"\"Id\" AS \"Key\", " + $"\"Name\" AS \"Name\" " + - $"FROM \"{TableNameResolver.GetFullTableName(nameof(TableNameEnum.MenuGroup))}\" " + + $"FROM \"{TableNameResolver.GetFullTableName(nameof(TableNameEnum.Module))}\" " + $"ORDER BY \"Name\";"; public static string ProductValues = diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Menus/MenuDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Menus/MenuDto.cs index ce42f94d..e75bc622 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/Menus/MenuDto.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/Menus/MenuDto.cs @@ -13,7 +13,7 @@ public class MenuDto : FullAuditedEntityDto public string ParentCode { get; set; } public string CssClass { get; set; } public string RequiredPermissionName { get; set; } - public string ShortName { get; set; } + public string ModuleId { get; set; } public string Target { get; set; } public bool IsDisabled { get; set; } diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Tenants/CustomTenantDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Tenants/CustomTenantDto.cs index ea638d62..fd52d589 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/Tenants/CustomTenantDto.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/Tenants/CustomTenantDto.cs @@ -22,7 +22,7 @@ public class CustomTenantDto public string FaxNumber { get; set; } public string Email { get; set; } public string Website { get; set; } - public string MenuGroup { get; set; } + public string Modules { get; set; } public string Reference { get; set; } } diff --git a/api/src/Sozsoft.Platform.Application/Identity/IdentityMappers.cs b/api/src/Sozsoft.Platform.Application/Identity/IdentityMappers.cs index c195435f..200c81ba 100644 --- a/api/src/Sozsoft.Platform.Application/Identity/IdentityMappers.cs +++ b/api/src/Sozsoft.Platform.Application/Identity/IdentityMappers.cs @@ -93,7 +93,7 @@ public partial class TenantToCustomTenantDtoMapper : MapperBase> CreateFilteredQueryAsync(ListFormFieldRequestDto input) @@ -217,6 +217,7 @@ public class ListFormFieldsAppService : CrudAppService< return await MapToGetOutputDtoAsync(item); } + [Authorize(AppCodes.Listforms.ListformField + ".Create")] public async Task CopyField(CopyListFormFieldColumnDto input) { ////Izin logic process diff --git a/api/src/Sozsoft.Platform.Application/ListForms/ListFormDynamicApiAppService.cs b/api/src/Sozsoft.Platform.Application/ListForms/ListFormDynamicApiAppService.cs index 79b6056e..05b79e7f 100644 --- a/api/src/Sozsoft.Platform.Application/ListForms/ListFormDynamicApiAppService.cs +++ b/api/src/Sozsoft.Platform.Application/ListForms/ListFormDynamicApiAppService.cs @@ -250,9 +250,9 @@ public class ListFormDynamicApiAppService : PlatformAppService, IListFormDynamic throw new UserFriendlyException("Tenant name is required."); } - if (input.Data.MenuGroup.IsNullOrWhiteSpace()) + if (input.Data.Modules.IsNullOrWhiteSpace()) { - throw new UserFriendlyException("Menu group is required."); + throw new UserFriendlyException("Module is required."); } var order = await orderRepository.GetAsync(input.Data.OrderId) @@ -283,11 +283,11 @@ public class ListFormDynamicApiAppService : PlatformAppService, IListFormDynamic FaxNumber = order.FaxNumber, Email = order.Email, Website = order.Website, - MenuGroup = input.Data.MenuGroup, + Modules = input.Data.Modules, }); order.TenantId = tenant.Id; - order.MenuGroup = input.Data.MenuGroup; + order.Modules = input.Data.Modules; await orderRepository.UpdateAsync(order, autoSave: true); return tenant.Id; @@ -315,7 +315,7 @@ public class ListFormDynamicApiAppService : PlatformAppService, IListFormDynamic entity.SetFaxNumber(input.FaxNumber); entity.SetEmail(input.Email); entity.SetWebsite(input.Website); - entity.SetMenuGroup(input.MenuGroup); + entity.SetModules(input.Modules); return await tenantRepository.UpdateAsync(entity, autoSave: true); } @@ -350,7 +350,7 @@ public class ListFormDynamicApiAppService : PlatformAppService, IListFormDynamic entity.SetFaxNumber(input.Data.FaxNumber); entity.SetEmail(input.Data.Email); entity.SetWebsite(input.Data.Website); - entity.SetMenuGroup(input.Data.MenuGroup); + entity.SetModules(input.Data.Modules); await tenantRepository.UpdateAsync(entity, autoSave: true); } diff --git a/api/src/Sozsoft.Platform.Application/ListForms/ListFormWizardAppService.cs b/api/src/Sozsoft.Platform.Application/ListForms/ListFormWizardAppService.cs index 1b391756..ef64807c 100644 --- a/api/src/Sozsoft.Platform.Application/ListForms/ListFormWizardAppService.cs +++ b/api/src/Sozsoft.Platform.Application/ListForms/ListFormWizardAppService.cs @@ -47,6 +47,7 @@ public class ListFormWizardAppService( IRepository repoPerm, IRepository repoPermGroup, IRepository repoMenu, + IRepository repoModule, IPermissionGrantRepository permissionGrantRepository, IConfiguration configuration, LanguageTextAppService languageTextAppService, @@ -63,6 +64,7 @@ public class ListFormWizardAppService( private readonly IRepository repoPerm = repoPerm; private readonly IRepository repoPermGroup = repoPermGroup; private readonly IRepository repoMenu = repoMenu; + private readonly IRepository repoModule = repoModule; private readonly IPermissionGrantRepository permissionGrantRepository = permissionGrantRepository; private readonly IConfiguration _configuration = configuration; private readonly LanguageTextAppService _languageTextAppService = languageTextAppService; @@ -214,6 +216,8 @@ public class ListFormWizardAppService( if (input.CreateMenu) { //Menu Parent + await EnsureModuleAsync(input.MenuParentModuleId); + var menuQueryable = await repoMenu.GetQueryableAsync(); var menuParent = await AsyncExecuter.FirstOrDefaultAsync(menuQueryable.Where(a => a.Code == input.MenuParentCode)); if (menuParent == null) @@ -230,16 +234,16 @@ public class ListFormWizardAppService( Code = input.MenuParentCode, DisplayName = input.MenuParentCode, IsDisabled = false, - ShortName = input.MenuParentShortName?.Trim(), + ModuleId = input.MenuParentModuleId?.Trim(), Icon = menuParentIcon, Order = maxRootOrder + 1, }, autoSave: false); inserted.MenuCodes.Add(input.MenuParentCode); } - else if (string.IsNullOrWhiteSpace(menuParent.ShortName) && - !string.IsNullOrWhiteSpace(input.MenuParentShortName)) + else if (string.IsNullOrWhiteSpace(menuParent.ModuleId) && + !string.IsNullOrWhiteSpace(input.MenuParentModuleId)) { - menuParent.ShortName = input.MenuParentShortName.Trim(); + menuParent.ModuleId = input.MenuParentModuleId.Trim(); await repoMenu.UpdateAsync(menuParent, autoSave: false); } @@ -264,13 +268,17 @@ public class ListFormWizardAppService( Url = menuUrl, RequiredPermissionName = permRead.Name, Order = menuOrder, + ModuleId = menuParent.ModuleId, }, autoSave: false); inserted.MenuCodes.Add(code); } - else if (existingMenu.Order != menuOrder || existingMenu.Url != menuUrl) + else if (existingMenu.Order != menuOrder || + existingMenu.Url != menuUrl || + string.IsNullOrWhiteSpace(existingMenu.ModuleId)) { existingMenu.Order = menuOrder; existingMenu.Url = menuUrl; + existingMenu.ModuleId ??= menuParent.ModuleId; await repoMenu.UpdateAsync(existingMenu, autoSave: false); } } @@ -1658,6 +1666,27 @@ public class ListFormWizardAppService( texts.FirstOrDefault(a => a.CultureName == LanguageCodes.Tr)?.Value); } + /// + /// Wizard'da secilen modul kaydi yoksa olusturur; menunun ModuleId yabanci anahtari + /// tanimsiz bir module bagli kalmasin diye menu yazilmadan once cagrilir. + /// + private async Task EnsureModuleAsync(string moduleId) + { + var cleaned = moduleId?.Trim(); + if (string.IsNullOrWhiteSpace(cleaned)) + { + return; + } + + if (await repoModule.AnyAsync(a => a.Id == cleaned)) + { + return; + } + + await repoModule.InsertAsync(new Module(cleaned) { Name = cleaned }, autoSave: false); + logger.LogInformation("Module '{ModuleId}' wizard tarafindan olusturuldu.", cleaned); + } + private async Task CreateLangKey(string key, string textEn, string textTr, WizardInsertedRecordsDto inserted = null) { var res = PlatformConsts.AppName; diff --git a/api/src/Sozsoft.Platform.Application/Menu/MenuAppService.cs b/api/src/Sozsoft.Platform.Application/Menu/MenuAppService.cs index 07b5a893..0be5085c 100644 --- a/api/src/Sozsoft.Platform.Application/Menu/MenuAppService.cs +++ b/api/src/Sozsoft.Platform.Application/Menu/MenuAppService.cs @@ -33,7 +33,7 @@ public class MenuAppService : CrudAppService< private readonly ITenantRepository _tenantRepository; private readonly IPermissionDefinitionRecordRepository _permissionRepository; private readonly LanguageTextAppService _languageTextAppService; - private readonly IRepository _menuGroupRepository; + private readonly IRepository _moduleRepository; public MenuAppService( IRepository menuRepository, @@ -42,7 +42,7 @@ public class MenuAppService : CrudAppService< ITenantRepository tenantRepository, IPermissionDefinitionRecordRepository permissionRepository, LanguageTextAppService languageTextAppService, - IRepository menuGroupRepository + IRepository moduleRepository ) : base(menuRepository) { _menuRepository = menuRepository; @@ -51,7 +51,7 @@ public class MenuAppService : CrudAppService< _tenantRepository = tenantRepository; _permissionRepository = permissionRepository; _languageTextAppService = languageTextAppService; - _menuGroupRepository = menuGroupRepository; + _moduleRepository = moduleRepository; CreatePolicyName = $"{AppCodes.Menus.Menu}.Create"; UpdatePolicyName = $"{AppCodes.Menus.Menu}.Update"; @@ -65,18 +65,18 @@ public class MenuAppService : CrudAppService< var query = await CreateFilteredQueryAsync(input); query = query.Where(a => !a.IsDisabled); - //Tenant üzerinden MenuGrup bilgisi alınıp sadece o menüler listelenecek + //Tenant üzerinden modül bilgisi alınıp yalnızca o modüllerin menüleri listelenecek if (CurrentTenant.IsAvailable) { var tenant = await _tenantRepository.FindAsync(CurrentTenant.Id.Value); if (tenant != null) { - var tenantMenuGroup = tenant.GetMenuGroup(); - if (!tenantMenuGroup.IsNullOrWhiteSpace()) + var tenantModules = tenant.GetModules(); + if (tenantModules.Length > 0) { var permissionRecords = await _permissionRepository.GetListAsync(); var allowedPermissionNames = permissionRecords - .Where(p => p.GetMenuGroup().Contains(tenantMenuGroup)) + .Where(p => p.GetModules().Intersect(tenantModules).Any()) .Select(p => p.Name) .Distinct() .ToList(); @@ -168,6 +168,8 @@ public class MenuAppService : CrudAppService< { await CheckCreatePolicyAsync(); + await EnsureModuleAsync(input.ModuleId); + var keyExists = await _repositoryKey.AnyAsync( a => a.Key == input.DisplayName && a.ResourceName == PlatformConsts.AppName); @@ -187,6 +189,8 @@ public class MenuAppService : CrudAppService< { await CheckUpdatePolicyAsync(); + await EnsureModuleAsync(input.ModuleId); + var key = await _repositoryKey.FirstOrDefaultAsync( a => a.Key == input.DisplayName && a.ResourceName == PlatformConsts.AppName); @@ -273,7 +277,7 @@ public class MenuAppService : CrudAppService< await CheckGetPolicyAsync(); var query = await _menuRepository.GetQueryableAsync(); - query = query.Where(a => !a.IsDisabled && a.ShortName != null); + query = query.Where(a => !a.IsDisabled && a.ModuleId != null); var entities = await AsyncExecuter.ToListAsync(query); var entityDtos = await MapToGetListOutputDtosAsync(entities); @@ -290,6 +294,8 @@ public class MenuAppService : CrudAppService< { await CheckUpdatePolicyAsync(); + await EnsureModuleAsync(input.ModuleId); + var menu = await _menuRepository.GetAsync(id); // Kod değiştirilemez: dil anahtarı, alt menülerin ParentCode'u ve permission @@ -352,6 +358,8 @@ public class MenuAppService : CrudAppService< { await CheckCreatePolicyAsync(); + await EnsureModuleAsync(input.ModuleId); + //Dil Key oluşturuluyor. var keyExists = await _repositoryKey.AnyAsync( a => a.Key == input.Code && @@ -415,16 +423,36 @@ public class MenuAppService : CrudAppService< return await base.CreateAsync(input); } - public async Task> GetMenuGroupsAsync() + /// + /// Menude secilen modul tanimli degilse olusturur; kok menude girilen kisa kod + /// dogrudan yeni bir modul olur ve ModuleId yabanci anahtari bos kalmaz. + /// + private async Task EnsureModuleAsync(string moduleId) { - var menuGroups = await _menuGroupRepository.GetListAsync(); + var cleaned = moduleId?.Trim(); + if (string.IsNullOrWhiteSpace(cleaned)) + { + return; + } - return menuGroups - .OrderBy(menuGroup => menuGroup.Name) - .Select(menuGroup => new LookupDataDto + if (await _moduleRepository.AnyAsync(a => a.Id == cleaned)) + { + return; + } + + await _moduleRepository.InsertAsync(new Module(cleaned) { Name = cleaned }, autoSave: true); + } + + public async Task> GetModulesAsync() + { + var modules = await _moduleRepository.GetListAsync(); + + return modules + .OrderBy(module => module.Name) + .Select(module => new LookupDataDto { - Key = menuGroup.Id, - Name = menuGroup.Name + Key = module.Id, + Name = module.Name }) .ToList(); } diff --git a/api/src/Sozsoft.Platform.Application/Permissions/PermissionAppService.cs b/api/src/Sozsoft.Platform.Application/Permissions/PermissionAppService.cs index a506c53f..c0d26314 100644 --- a/api/src/Sozsoft.Platform.Application/Permissions/PermissionAppService.cs +++ b/api/src/Sozsoft.Platform.Application/Permissions/PermissionAppService.cs @@ -24,7 +24,7 @@ public class PlatformPermissionGroupDto : PermissionGroupDto public class PlatformPermissionGrantInfoDto : PermissionGrantInfoDto { - public string MenuGroup { get; set; } = string.Empty; + public string Modules { get; set; } = string.Empty; } [Dependency(ReplaceServices = true)] @@ -64,7 +64,7 @@ public class PlatformPermissionAppService : PermissionAppService foreach (var permission in group.Permissions) { var definition = allDefinitions.FirstOrDefault(x => x.Name == permission.Name); - var menuGroup = definition?.Properties.GetOrDefault(PlatformConsts.Permissions.MenuGroup)?.ToString(); + var modules = definition?.Properties.GetOrDefault(PlatformConsts.Permissions.Modules)?.ToString(); var newPermission = new PlatformPermissionGrantInfoDto { @@ -74,7 +74,7 @@ public class PlatformPermissionAppService : PermissionAppService AllowedProviders = permission.AllowedProviders, GrantedProviders = permission.GrantedProviders, IsGranted = permission.IsGranted, - MenuGroup = menuGroup ?? string.Empty + Modules = modules ?? string.Empty }; newGroup.Permissions.Add(newPermission); diff --git a/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs b/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs index a9d4897c..b8aebadf 100644 --- a/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs +++ b/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs @@ -644,7 +644,7 @@ public class PublicAppService : PlatformAppService FaxNumber = NormalizePhoneNumber(input.Tenant.FaxNumber, input.Tenant.Country), Email = input.Tenant.Email, Website = input.Tenant.Website, - MenuGroup = input.Tenant.MenuGroup, + Modules = input.Tenant.Modules, BillingCycle = input.BillingCycle, Period = input.Period, diff --git a/api/src/Sozsoft.Platform.Application/Tenants/PlatformTenantAppService.cs b/api/src/Sozsoft.Platform.Application/Tenants/PlatformTenantAppService.cs index f5f614be..4b61d267 100644 --- a/api/src/Sozsoft.Platform.Application/Tenants/PlatformTenantAppService.cs +++ b/api/src/Sozsoft.Platform.Application/Tenants/PlatformTenantAppService.cs @@ -89,7 +89,7 @@ public class PlatformTenantAppService : TenantAppService, IPlatformTenantAppServ dto.FaxNumber = tenant.GetFaxNumber(); dto.Email = tenant.GetEmail(); dto.Website = tenant.GetWebsite(); - dto.MenuGroup = tenant.GetMenuGroup(); + dto.Modules = tenant.GetModulesRaw(); return dto; } diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/HostDataSeeder.cs b/api/src/Sozsoft.Platform.DbMigrator/Migrations/HostDataSeeder.cs index 88520934..176c7d01 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/HostDataSeeder.cs +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/HostDataSeeder.cs @@ -71,7 +71,7 @@ public class PermissionDefinitionRecordSeedDto public string DisplayName { get; set; } public bool IsEnabled { get; set; } public int MultiTenancySide { get; set; } - public string MenuGroup { get; set; } + public string Modules { get; set; } } public class CurrencySeedDto diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/LanguagesData.json b/api/src/Sozsoft.Platform.DbMigrator/Migrations/LanguagesData.json index 504dca86..0dd632ba 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/LanguagesData.json +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/LanguagesData.json @@ -1436,9 +1436,9 @@ }, { "resourceName": "Platform", - "key": "App.Menus.MenuGroup", - "en": "Menu Groups", - "tr": "Menü Grupları" + "key": "App.Menus.Module", + "en": "Modules", + "tr": "Modüller" }, { "resourceName": "Platform", @@ -1461,8 +1461,8 @@ { "resourceName": "Platform", "key": "App.LicenceItem", - "en": "Licence Items", - "tr": "Lisans Kalemleri" + "en": "Items", + "tr": "Öğeler" }, { "resourceName": "Platform", @@ -1509,8 +1509,8 @@ { "resourceName": "Platform", "key": "App.Listforms.ListformField", - "en": "Listform Fields", - "tr": "Listform Alanları" + "en": "Fields", + "tr": "Alanlar" }, { "resourceName": "Platform", @@ -6459,38 +6459,38 @@ { "resourceName": "Platform", "key": "App.Intranet.SocialLike", - "tr": "Sosyal Beğeniler", - "en": "Social Likes" + "tr": "Beğeniler", + "en": "Likes" }, { "resourceName": "Platform", "key": "App.Intranet.SocialComment", - "tr": "Sosyal Yorumlar", - "en": "Social Comments" + "tr": "Yorumlar", + "en": "Comments" }, { "resourceName": "Platform", "key": "App.Intranet.SurveyQuestion", - "tr": "Anket Soruları", - "en": "Survey Questions" + "tr": "Sorular", + "en": "Questions" }, { "resourceName": "Platform", "key": "App.Intranet.SurveyQuestionOption", - "tr": "Anket Soruları Seçenekleri", - "en": "Survey Question Options" + "tr": "Sorular Seçenekleri", + "en": "Question Options" }, { "resourceName": "Platform", "key": "App.Intranet.SurveyResponse", - "tr": "Anket Yanıtları", - "en": "Survey Responses" + "tr": "Yanıtlar", + "en": "Responses" }, { "resourceName": "Platform", "key": "App.Intranet.SurveyAnswer", - "tr": "Anket Yanıtları Cevapları", - "en": "Survey Response Answers" + "tr": "Yanıt Cevapları", + "en": "Response Answers" }, { "resourceName": "Platform", @@ -6537,14 +6537,14 @@ { "resourceName": "Platform", "key": "App.Intranet.Events.EventLike", - "tr": "Etkinlik Beğenileri", - "en": "Event Likes" + "tr": "Beğeniler", + "en": "Likes" }, { "resourceName": "Platform", "key": "App.Intranet.Events.EventComment", - "tr": "Etkinlik Yorumları", - "en": "Event Comments" + "tr": "Yorumlar", + "en": "Comments" }, { "resourceName": "Platform", @@ -12339,14 +12339,14 @@ { "resourceName": "Platform", "key": "App.Intranet.Announcement.AnnouncementLike", - "en": "Announcements Like", - "tr": "Duyuru Beğenileri" + "en": "Likes", + "tr": "Beğeniler" }, { "resourceName": "Platform", "key": "App.Intranet.Announcement.AnnouncementComment", - "en": "Announcements Comments", - "tr": "Duyuru Yorumları" + "en": "Comments", + "tr": "Yorumlar" }, { "resourceName": "Platform", @@ -14234,9 +14234,9 @@ }, { "resourceName": "Platform", - "key": "App.Listform.ListformField.MenuGroup", - "en": "Menu Group", - "tr": "Menü Grubu" + "key": "App.Listform.ListformField.Modules", + "en": "Modules", + "tr": "Modüller" }, { "resourceName": "Platform", @@ -15302,9 +15302,9 @@ }, { "resourceName": "Platform", - "key": "App.Listform.ListformField.ShortName", - "en": "Short Name", - "tr": "Kısa Adı" + "key": "App.Listform.ListformField.ModuleId", + "en": "Module", + "tr": "Modül" }, { "resourceName": "Platform", @@ -16406,9 +16406,9 @@ }, { "resourceName": "Platform", - "key": "App.WizardStep1.ShortName", - "en": "Short Name", - "tr": "Kısa Ad" + "key": "App.WizardStep1.ModuleId", + "en": "Module", + "tr": "Modül" }, { "resourceName": "Platform", @@ -27285,8 +27285,8 @@ { "resourceName": "Platform", "key": "AbpTenantManagement.Tenants.Description", - "en": "Tenants — the customer/organization records of the platform. Table: AbpTenants · host scope · list screen (Kanban view is also open).\nUsage: every organization using the platform is one row here. The row carries not only the login identity but the whole commercial identity: title, founder, tax office, address and contact information — invoices, licence cards and order records read these fields.\nFields:\n• Name → the tenant's login name; it is also the Code of the DataSource record that carries the tenant's connection\n• OrganizationName, Founder → legal title and the founder shown on the licence card\n• VknTckn, TaxOffice → tax number and tax office; used on invoices and in the order flow\n• Country, City, District, Township, Address1, Address2, PostalCode → address chain; the lookups come from the Definitions › Country/City/District screens\n• Email, Website, PhoneNumber, MobileNumber, FaxNumber → contact information\n• MenuGroup → which module set the tenant may see; menus are filtered by this value\n• IsActive → a passive tenant cannot log in, but its data is preserved\nConnection and seed: the row command opens the TenantsConnectionString dialog. There the tenant's own database connection is defined and the seed flow that writes the tenant's default data (roles, menus, list definitions, language texts) is started. Without a connection the tenant shares the host database.\nSub-tab: Branches (App.Branches) — the tenant's branches are entered without leaving this screen.\nWriting: insert and update are delegated to the list-form-dynamic-api/tenant-insert and tenant-update services, so the ABP tenant creation flow (schema, admin user, default roles) runs on the server rather than through plain SQL.\nWhy it matters: every screen defined with IsTenant = true resolves its data source over this record — first the DataSource row named after the tenant, otherwise the screen's own DataSourceCode.\nCaution: a connection string is never written into code, JSON or a seed file; it lives only in this dialog. Renaming a tenant breaks the DataSource record bound to the old name.", - "tr": "Kiracılar — platformu kullanan müşteri/organizasyon kayıtları. Tablo: AbpTenants · host kapsamlı · liste ekranı (Kanban görünümü de açıktır).\nKullanım: platformu kullanan her organizasyon burada bir satırdır. Satır yalnızca oturum kimliğini değil ticari kimliğin tamamını taşır: unvan, kurucu, vergi dairesi, adres ve iletişim bilgileri — fatura, lisans kartı ve sipariş kayıtları bu alanları okur.\nAlanlar:\n• Name → kiracının oturum adı; aynı zamanda kiracı bağlantısını taşıyan DataSource kaydının Code değeridir\n• OrganizationName, Founder → resmi unvan ve lisans kartında görünen kurucu\n• VknTckn, TaxOffice → vergi numarası ve vergi dairesi; faturada ve sipariş akışında kullanılır\n• Country, City, District, Township, Address1, Address2, PostalCode → adres zinciri; lookup'lar Tanımlar › Ülke/Şehir/İlçe ekranlarından gelir\n• Email, Website, PhoneNumber, MobileNumber, FaxNumber → iletişim bilgileri\n• MenuGroup → kiracının hangi modül kümesini göreceği; menüler bu değere göre süzülür\n• IsActive → pasif kiracı oturum açamaz, verisi korunur\nBağlantı ve seed: satırdaki komut TenantsConnectionString diyaloğunu açar. Kiracının kendi veritabanı bağlantısı burada tanımlanır ve kiracının varsayılan verisini (rol, menü, liste tanımları, dil metinleri) basan seed akışı buradan başlatılır. Bağlantı tanımlanmazsa kiracı host veritabanını paylaşır.\nAlt sekme: Şubeler (App.Branches) — kiracının şubeleri bu ekrandan çıkmadan girilir.\nYazma: ekleme ve güncelleme list-form-dynamic-api/tenant-insert ve tenant-update servislerine devredilir; böylece ABP'nin kiracı oluşturma akışı (şema, admin kullanıcı, varsayılan roller) düz SQL yerine sunucuda çalışır.\nNeden önemli: IsTenant = true ile tanımlanan her ekran veri kaynağını bu kayıt üzerinden çözer — önce kiracı adıyla eşleşen DataSource satırı, yoksa ekranın kendi DataSourceCode değeri.\nDikkat: bağlantı dizesi koda, JSON'a veya seed dosyasına yazılmaz; yalnızca bu diyalogda durur. Kiracının adını değiştirmek, eski ada bağlı DataSource kaydını kopartır." + "en": "Tenants — the customer/organization records of the platform. Table: AbpTenants · host scope · list screen (Kanban view is also open).\nUsage: every organization using the platform is one row here. The row carries not only the login identity but the whole commercial identity: title, founder, tax office, address and contact information — invoices, licence cards and order records read these fields.\nFields:\n• Name → the tenant's login name; it is also the Code of the DataSource record that carries the tenant's connection\n• OrganizationName, Founder → legal title and the founder shown on the licence card\n• VknTckn, TaxOffice → tax number and tax office; used on invoices and in the order flow\n• Country, City, District, Township, Address1, Address2, PostalCode → address chain; the lookups come from the Definitions › Country/City/District screens\n• Email, Website, PhoneNumber, MobileNumber, FaxNumber → contact information\n• Modules → which modules the tenant may see (pipe separated, e.g. Sas|Adm); menus are filtered by this value\n• IsActive → a passive tenant cannot log in, but its data is preserved\nConnection and seed: the row command opens the TenantsConnectionString dialog. There the tenant's own database connection is defined and the seed flow that writes the tenant's default data (roles, menus, list definitions, language texts) is started. Without a connection the tenant shares the host database.\nSub-tab: Branches (App.Branches) — the tenant's branches are entered without leaving this screen.\nWriting: insert and update are delegated to the list-form-dynamic-api/tenant-insert and tenant-update services, so the ABP tenant creation flow (schema, admin user, default roles) runs on the server rather than through plain SQL.\nWhy it matters: every screen defined with IsTenant = true resolves its data source over this record — first the DataSource row named after the tenant, otherwise the screen's own DataSourceCode.\nCaution: a connection string is never written into code, JSON or a seed file; it lives only in this dialog. Renaming a tenant breaks the DataSource record bound to the old name.", + "tr": "Kiracılar — platformu kullanan müşteri/organizasyon kayıtları. Tablo: AbpTenants · host kapsamlı · liste ekranı (Kanban görünümü de açıktır).\nKullanım: platformu kullanan her organizasyon burada bir satırdır. Satır yalnızca oturum kimliğini değil ticari kimliğin tamamını taşır: unvan, kurucu, vergi dairesi, adres ve iletişim bilgileri — fatura, lisans kartı ve sipariş kayıtları bu alanları okur.\nAlanlar:\n• Name → kiracının oturum adı; aynı zamanda kiracı bağlantısını taşıyan DataSource kaydının Code değeridir\n• OrganizationName, Founder → resmi unvan ve lisans kartında görünen kurucu\n• VknTckn, TaxOffice → vergi numarası ve vergi dairesi; faturada ve sipariş akışında kullanılır\n• Country, City, District, Township, Address1, Address2, PostalCode → adres zinciri; lookup'lar Tanımlar › Ülke/Şehir/İlçe ekranlarından gelir\n• Email, Website, PhoneNumber, MobileNumber, FaxNumber → iletişim bilgileri\n• Modules → kiracının göreceği modüller (pipe ile ayrılır, örn. Sas|Adm); menüler bu değere göre süzülür\n• IsActive → pasif kiracı oturum açamaz, verisi korunur\nBağlantı ve seed: satırdaki komut TenantsConnectionString diyaloğunu açar. Kiracının kendi veritabanı bağlantısı burada tanımlanır ve kiracının varsayılan verisini (rol, menü, liste tanımları, dil metinleri) basan seed akışı buradan başlatılır. Bağlantı tanımlanmazsa kiracı host veritabanını paylaşır.\nAlt sekme: Şubeler (App.Branches) — kiracının şubeleri bu ekrandan çıkmadan girilir.\nYazma: ekleme ve güncelleme list-form-dynamic-api/tenant-insert ve tenant-update servislerine devredilir; böylece ABP'nin kiracı oluşturma akışı (şema, admin kullanıcı, varsayılan roller) düz SQL yerine sunucuda çalışır.\nNeden önemli: IsTenant = true ile tanımlanan her ekran veri kaynağını bu kayıt üzerinden çözer — önce kiracı adıyla eşleşen DataSource satırı, yoksa ekranın kendi DataSourceCode değeri.\nDikkat: bağlantı dizesi koda, JSON'a veya seed dosyasına yazılmaz; yalnızca bu diyalogda durur. Kiracının adını değiştirmek, eski ada bağlı DataSource kaydını kopartır." }, { "resourceName": "Platform", @@ -27441,20 +27441,20 @@ { "resourceName": "Platform", "key": "App.Menus.Routes.Description", - "en": "Routes — the route records of custom React screens. Table: Sas_H_Route · host scope · list screen.\nUsage: needed only when a page written in code is added — this is the last step of the decision order. Screens produced with a ListForm do not get a route record; they use the ready dynamic routes /admin/list/{code}, /admin/form/{code}, /admin/form/{code}/{id}, /admin/chart/{code}.\nFields:\n• Key → the unique key of the route; the menu record binds to the page over this value\n• Path → the url; parameters are written in the /admin/foo/:id form\n• ComponentType → how the component is resolved (normal)\n• ComponentPath → the component path, e.g. @/views/admin/foo/Foo. The file must exist in the repository\n• RouteType → who may open it: public (no login), authenticated (any logged in user), protected (permission required)\n• Authority → the permissions that may open it; on a protected route this field is mandatory\nCaution: a route whose ComponentPath does not exist breaks the whole menu load, not just that page. In Migrations/MenusData.json the Routes section is managed by the platform — while adding a menu only the MenuGroups and Menus sections are touched.", - "tr": "Route'lar — özel React ekranlarının route kayıtları. Tablo: Sas_H_Route · host kapsamlı · liste ekranı.\nKullanım: yalnızca kod ile yazılmış bir sayfa eklenirken gerekir — karar sırasının son adımıdır. ListForm ile üretilen ekranlara route kaydı açılmaz; hazır dinamik rotalar kullanılır: /admin/list/{kod}, /admin/form/{kod}, /admin/form/{kod}/{id}, /admin/chart/{kod}.\nAlanlar:\n• Key → route'un benzersiz anahtarı; menü kaydı sayfaya bu değerle bağlanır\n• Path → url; parametreler /admin/foo/:id biçiminde yazılır\n• ComponentType → bileşenin nasıl çözüleceği (normal)\n• ComponentPath → bileşen yolu, örn. @/views/admin/foo/Foo. Dosyanın depoda bulunması zorunludur\n• RouteType → kimin açabileceği: public (oturumsuz), authenticated (oturum açmış herkes), protected (yetki gerekir)\n• Authority → açabilecek yetkiler; protected route'ta bu alan zorunludur\nDikkat: ComponentPath karşılığı olmayan route yalnızca o sayfayı değil menünün tamamının yüklenmesini bozar. Migrations/MenusData.json içindeki Routes bölümü platform tarafından yönetilir — menü eklerken yalnızca MenuGroups ve Menus bölümlerine dokunulur." + "en": "Routes — the route records of custom React screens. Table: Sas_H_Route · host scope · list screen.\nUsage: needed only when a page written in code is added — this is the last step of the decision order. Screens produced with a ListForm do not get a route record; they use the ready dynamic routes /admin/list/{code}, /admin/form/{code}, /admin/form/{code}/{id}, /admin/chart/{code}.\nFields:\n• Key → the unique key of the route; the menu record binds to the page over this value\n• Path → the url; parameters are written in the /admin/foo/:id form\n• ComponentType → how the component is resolved (normal)\n• ComponentPath → the component path, e.g. @/views/admin/foo/Foo. The file must exist in the repository\n• RouteType → who may open it: public (no login), authenticated (any logged in user), protected (permission required)\n• Authority → the permissions that may open it; on a protected route this field is mandatory\nCaution: a route whose ComponentPath does not exist breaks the whole menu load, not just that page. In Migrations/MenusData.json the Routes section is managed by the platform — while adding a menu only the Modules and Menus sections are touched.", + "tr": "Route'lar — özel React ekranlarının route kayıtları. Tablo: Sas_H_Route · host kapsamlı · liste ekranı.\nKullanım: yalnızca kod ile yazılmış bir sayfa eklenirken gerekir — karar sırasının son adımıdır. ListForm ile üretilen ekranlara route kaydı açılmaz; hazır dinamik rotalar kullanılır: /admin/list/{kod}, /admin/form/{kod}, /admin/form/{kod}/{id}, /admin/chart/{kod}.\nAlanlar:\n• Key → route'un benzersiz anahtarı; menü kaydı sayfaya bu değerle bağlanır\n• Path → url; parametreler /admin/foo/:id biçiminde yazılır\n• ComponentType → bileşenin nasıl çözüleceği (normal)\n• ComponentPath → bileşen yolu, örn. @/views/admin/foo/Foo. Dosyanın depoda bulunması zorunludur\n• RouteType → kimin açabileceği: public (oturumsuz), authenticated (oturum açmış herkes), protected (yetki gerekir)\n• Authority → açabilecek yetkiler; protected route'ta bu alan zorunludur\nDikkat: ComponentPath karşılığı olmayan route yalnızca o sayfayı değil menünün tamamının yüklenmesini bozar. Migrations/MenusData.json içindeki Routes bölümü platform tarafından yönetilir — menü eklerken yalnızca Modules ve Menus bölümlerine dokunulur." }, { "resourceName": "Platform", - "key": "App.Menus.MenuGroup.Description", - "en": "Menu Group — the root headings of the left menu. Table: Sas_H_MenuGroup · host scope · list screen.\nUsage: a group is the entry point of a module (Saas, Administration, CRM, Production). Menu items are placed under a group and the tenant's MenuGroup field decides which groups it sees.\nFields:\n• Name → group name; menu records and the tenant's MenuGroup value reference this text\nCaution: a new screen is not pushed under an existing 'Definitions' heading by default — a root menu is created for its own module and Order = max(Order) + 1 is used. A group with no menu item is not rendered.", - "tr": "Menü Grubu — sol menünün kök başlıkları. Tablo: Sas_H_MenuGroup · host kapsamlı · liste ekranı.\nKullanım: grup, bir modülün giriş noktasıdır (Saas, Administration, CRM, Üretim). Menü öğeleri bir grubun altına yerleşir ve kiracının MenuGroup alanı hangi grupları göreceğini belirler.\nAlanlar:\n• Name → grup adı; menü kayıtları ve kiracının MenuGroup değeri bu metne referans verir\nDikkat: yeni ekran varsayılan olarak mevcut 'Tanımlar' başlığının altına atılmaz — modülüne ait yeni bir kök menü oluşturulur ve Order = max(Order) + 1 kullanılır. Menü öğesi olmayan grup basılmaz." + "key": "App.Menus.Module.Description", + "en": "Module — the modules of the platform. Table: Sas_H_Module · host scope · list screen.\nUsage: a module is the entry point of a feature set (Saas, Administration, CRM, Production). A root menu binds to a module through its ModuleId field, and the tenant Modules field decides which modules it sees.\nFields:\n• Id → module code; the menu record references it through ModuleId\n• Name → module name; the tenant Modules value references this text\nCaution: a module referenced by a menu cannot be deleted — the foreign key is restricted.", + "tr": "Modül — platformun modülleri. Tablo: Sas_H_Module · host kapsamlı · liste ekranı.\nKullanım: modül, bir yetenek kümesinin giriş noktasıdır (Saas, Administration, CRM, Üretim). Kök menü, ModuleId alanı ile bir modüle bağlanır; kiracının Modules alanı hangi modülleri göreceğini belirler.\nAlanlar:\n• Id → modül kodu; menü kaydı ModuleId ile buna referans verir\n• Name → modül adı; kiracının Modules değeri bu metne referans verir\nDikkat: bir menü tarafından kullanılan modül silinemez — yabancı anahtar kısıtlıdır." }, { "resourceName": "Platform", "key": "App.Menus.Menu.Description", - "en": "Menu — menu items. Table: Sas_H_Menu · host scope · tree layout. The menu comes from the database, not from code.\nUsage: the tree of the left menu is built here. The produced screen becomes visible to the user only after its menu record is opened.\nFields:\n• Code → the unique code of the menu item; the child items reference it through ParentCode\n• ParentCode → the parent menu; the tree structure is formed over this field\n• DisplayName → the language key of the displayed name; the text is written on Language Text\n• ShortName → the short name used in the collapsed menu\n• Url → the address it opens; for a produced screen /admin/list/{ListFormCode}\n• Icon, CssClass → the icon and additional style\n• Order → the ordering among siblings\n• Target → does it open in the same tab or a new one\n• ElementId → the dom id used for tests and guided tours\n• RequiredPermissionName → a menu whose permission the user does not hold is not rendered at all\n• IsDisabled → a disabled item does not appear in the menu; the record is preserved\nRule: the menu item, the route it opens and the permission must show the same contract. A visible menu leading to a screen the user cannot open is a design error.\nCaution: a menu added only from the interface disappears on a database reset; the same record is also written into Migrations/MenusData.json (MenuGroups and Menus sections only).", - "tr": "Menü — menü öğeleri. Tablo: Sas_H_Menu · host kapsamlı · ağaç düzeni. Menü koddan değil veritabanından gelir.\nKullanım: sol menünün ağacı burada kurulur. Üretilen ekran, menü kaydı açılmadan kullanıcıya görünmez.\nAlanlar:\n• Code → menü öğesinin benzersiz kodu; alt öğeler ParentCode ile buna referans verir\n• ParentCode → üst menü; ağaç yapısı bu alan üzerinden kurulur\n• DisplayName → görünen adın dil anahtarı; metin Language Text ekranına yazılır\n• ShortName → daraltılmış menüde kullanılan kısa ad\n• Url → açtığı adres; üretilen ekran için /admin/list/{ListFormCode}\n• Icon, CssClass → ikon ve ek stil\n• Order → kardeşleri arasındaki sıra\n• Target → aynı sekmede mi yeni sekmede mi açılacağı\n• ElementId → test ve rehberli tur için kullanılan dom kimliği\n• RequiredPermissionName → kullanıcının yetkisi olmayan menü hiç basılmaz\n• IsDisabled → pasif öğe menüde görünmez, kaydı korunur\nKural: menü öğesi, açtığı route ve yetki aynı sözleşmeyi göstermelidir. Görünen ama açılamayan ekrana götüren menü tasarım hatasıdır.\nDikkat: yalnızca arayüzden eklenen menü veritabanı sıfırlandığında kaybolur; aynı kayıt Migrations/MenusData.json dosyasına da yazılır (yalnızca MenuGroups ve Menus bölümleri)." + "en": "Menu — menu items. Table: Sas_H_Menu · host scope · tree layout. The menu comes from the database, not from code.\nUsage: the tree of the left menu is built here. The produced screen becomes visible to the user only after its menu record is opened.\nFields:\n• Code → the unique code of the menu item; the child items reference it through ParentCode\n• ParentCode → the parent menu; the tree structure is formed over this field\n• DisplayName → the language key of the displayed name; the text is written on Language Text\n• ModuleId → the module the root menu belongs to; it references the Module record and the module cannot be deleted while a menu points at it\n• Url → the address it opens; for a produced screen /admin/list/{ListFormCode}\n• Icon, CssClass → the icon and additional style\n• Order → the ordering among siblings\n• Target → does it open in the same tab or a new one\n• ElementId → the dom id used for tests and guided tours\n• RequiredPermissionName → a menu whose permission the user does not hold is not rendered at all\n• IsDisabled → a disabled item does not appear in the menu; the record is preserved\nRule: the menu item, the route it opens and the permission must show the same contract. A visible menu leading to a screen the user cannot open is a design error.\nCaution: a menu added only from the interface disappears on a database reset; the same record is also written into Migrations/MenusData.json (Modules and Menus sections only).", + "tr": "Menü — menü öğeleri. Tablo: Sas_H_Menu · host kapsamlı · ağaç düzeni. Menü koddan değil veritabanından gelir.\nKullanım: sol menünün ağacı burada kurulur. Üretilen ekran, menü kaydı açılmadan kullanıcıya görünmez.\nAlanlar:\n• Code → menü öğesinin benzersiz kodu; alt öğeler ParentCode ile buna referans verir\n• ParentCode → üst menü; ağaç yapısı bu alan üzerinden kurulur\n• DisplayName → görünen adın dil anahtarı; metin Language Text ekranına yazılır\n• ModuleId → kök menünün bağlı olduğu modül; Modül kaydına referans verir, menü bağlıyken modül silinemez\n• Url → açtığı adres; üretilen ekran için /admin/list/{ListFormCode}\n• Icon, CssClass → ikon ve ek stil\n• Order → kardeşleri arasındaki sıra\n• Target → aynı sekmede mi yeni sekmede mi açılacağı\n• ElementId → test ve rehberli tur için kullanılan dom kimliği\n• RequiredPermissionName → kullanıcının yetkisi olmayan menü hiç basılmaz\n• IsDisabled → pasif öğe menüde görünmez, kaydı korunur\nKural: menü öğesi, açtığı route ve yetki aynı sözleşmeyi göstermelidir. Görünen ama açılamayan ekrana götüren menü tasarım hatasıdır.\nDikkat: yalnızca arayüzden eklenen menü veritabanı sıfırlandığında kaybolur; aynı kayıt Migrations/MenusData.json dosyasına da yazılır (yalnızca Modules ve Menus bölümleri)." }, { "resourceName": "Platform", @@ -27525,8 +27525,8 @@ { "resourceName": "Platform", "key": "Abp.Identity.Permissions.Description", - "en": "Permissions — the permission definitions of the application. Table: AbpPermissions · tree layout.\nUsage: the permission contract of every screen is visible here. A list screen normally has a root permission plus the .Create, .Update, .Delete, .Export, .Import and .Note sub-permissions; the ListForm PermissionJson maps these codes onto the buttons.\nFields:\n• Name → the permission code, e.g. App.Definitions.Currency.Create. It is the same value referenced from the code (PlatformConsts.AppCodes) and from the UI\n• ParentName → the parent permission; the tree is formed over this field and granting a parent does not automatically grant the children\n• GroupName → the permission group it belongs to\n• DisplayName → the language key of the displayed name\n• MultiTenancySide → on which side it is valid: host, tenant or both. A permission defined only for host is not offered to a tenant role\n• MenuGroup → which module the permission belongs to; it drives the module based filtering of the permission dialogs\n• IsEnabled → a disabled permission is not offered to anyone; it is the fastest way to close a capability across the system\nCaution: a permission added only from the interface is lost on a database reset. The same record is also written into PlatformConsts.AppCodes, Migrations/PermissionsData.json, LanguagesData.json and, if it is used in the interface, into permission.constant.ts.", - "tr": "Yetkiler — uygulamanın yetki tanımları. Tablo: AbpPermissions · ağaç düzeni.\nKullanım: her ekranın yetki sözleşmesi burada görünür. Liste ekranı normalde bir kök yetki ile birlikte .Create, .Update, .Delete, .Export, .Import ve .Note alt yetkilerini taşır; ListForm PermissionJson bu kodları butonlara eşler.\nAlanlar:\n• Name → yetki kodu, örn. App.Definitions.Currency.Create. Koddan (PlatformConsts.AppCodes) ve arayüzden referans verilen değerle aynıdır\n• ParentName → üst yetki; ağaç bu alan üzerinden kurulur ve üst yetkiyi vermek alt yetkileri otomatik vermez\n• GroupName → bağlı olduğu yetki grubu\n• DisplayName → görünen adın dil anahtarı\n• MultiTenancySide → hangi tarafta geçerli olduğu: host, tenant veya ikisi. Yalnızca host için tanımlı yetki kiracı rolüne sunulmaz\n• MenuGroup → yetkinin hangi modüle ait olduğu; yetki diyaloglarının modül bazlı süzülmesini sağlar\n• IsEnabled → pasif yetki kimseye sunulmaz; bir yeteneği sistem genelinde kapatmanın en hızlı yoludur\nDikkat: yalnızca arayüzden eklenen yetki veritabanı sıfırlandığında kaybolur. Aynı kayıt PlatformConsts.AppCodes, Migrations/PermissionsData.json, LanguagesData.json ve arayüzde kullanılacaksa permission.constant.ts dosyalarına da yazılır." + "en": "Permissions — the permission definitions of the application. Table: AbpPermissions · tree layout.\nUsage: the permission contract of every screen is visible here. A list screen normally has a root permission plus the .Create, .Update, .Delete, .Export, .Import and .Note sub-permissions; the ListForm PermissionJson maps these codes onto the buttons.\nFields:\n• Name → the permission code, e.g. App.Definitions.Currency.Create. It is the same value referenced from the code (PlatformConsts.AppCodes) and from the UI\n• ParentName → the parent permission; the tree is formed over this field and granting a parent does not automatically grant the children\n• GroupName → the permission group it belongs to\n• DisplayName → the language key of the displayed name\n• MultiTenancySide → on which side it is valid: host, tenant or both. A permission defined only for host is not offered to a tenant role\n• Modules → which modules the permission belongs to; it drives the module based filtering of the permission dialogs\n• IsEnabled → a disabled permission is not offered to anyone; it is the fastest way to close a capability across the system\nCaution: a permission added only from the interface is lost on a database reset. The same record is also written into PlatformConsts.AppCodes, Migrations/PermissionsData.json, LanguagesData.json and, if it is used in the interface, into permission.constant.ts.", + "tr": "Yetkiler — uygulamanın yetki tanımları. Tablo: AbpPermissions · ağaç düzeni.\nKullanım: her ekranın yetki sözleşmesi burada görünür. Liste ekranı normalde bir kök yetki ile birlikte .Create, .Update, .Delete, .Export, .Import ve .Note alt yetkilerini taşır; ListForm PermissionJson bu kodları butonlara eşler.\nAlanlar:\n• Name → yetki kodu, örn. App.Definitions.Currency.Create. Koddan (PlatformConsts.AppCodes) ve arayüzden referans verilen değerle aynıdır\n• ParentName → üst yetki; ağaç bu alan üzerinden kurulur ve üst yetkiyi vermek alt yetkileri otomatik vermez\n• GroupName → bağlı olduğu yetki grubu\n• DisplayName → görünen adın dil anahtarı\n• MultiTenancySide → hangi tarafta geçerli olduğu: host, tenant veya ikisi. Yalnızca host için tanımlı yetki kiracı rolüne sunulmaz\n• Modules → yetkinin hangi modüllere ait olduğu; yetki diyaloglarının modül bazlı süzülmesini sağlar\n• IsEnabled → pasif yetki kimseye sunulmaz; bir yeteneği sistem genelinde kapatmanın en hızlı yoludur\nDikkat: yalnızca arayüzden eklenen yetki veritabanı sıfırlandığında kaybolur. Aynı kayıt PlatformConsts.AppCodes, Migrations/PermissionsData.json, LanguagesData.json ve arayüzde kullanılacaksa permission.constant.ts dosyalarına da yazılır." }, { "resourceName": "Platform", diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Administration.cs b/api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Administration.cs index b9b2054f..98e0bf20 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Administration.cs +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Administration.cs @@ -410,12 +410,12 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, SourceDbType = DbType.String, - FieldName = "MenuGroup", + FieldName = "Modules", EditGroupOrderNo = 1, EditOrderNo = 7, EditorType2 = EditorTypes.dxTagBox, ColSpan = 1, - CaptionName = "App.Listform.ListformField.MenuGroup", + CaptionName = "App.Listform.ListformField.Modules", Width = 0, ListOrderNo = 8, Visible = true, @@ -426,7 +426,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep DataSourceType = UiLookupDataSourceTypeEnum.Query, DisplayExpr = "name", ValueExpr = "key", - LookupQuery = LookupQueryValues.MenuGroupValues + LookupQuery = LookupQueryValues.ModuleValues }), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Saas.cs b/api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Saas.cs index 3a0c7759..5ccee3c8 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Saas.cs +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Saas.cs @@ -572,13 +572,12 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, SourceDbType = DbType.String, - FieldName = "MenuGroup", + FieldName = "Modules", EditGroupOrderNo = 1, EditOrderNo = 9, - EditorType2 = EditorTypes.dxSelectBox, + EditorType2 = EditorTypes.dxTagBox, ColSpan = 1, - EditorOptions = EditorOptions.ShowClearButton(), - CaptionName = "App.Listform.ListformField.MenuGroup", + CaptionName = "App.Listform.ListformField.Modules", Width = 0, ListOrderNo = 20, Visible = true, @@ -587,7 +586,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency DataSourceType = UiLookupDataSourceTypeEnum.Query, DisplayExpr = "name", ValueExpr = "key", - LookupQuery = LookupQueryValues.MenuGroupValues, + LookupQuery = LookupQueryValues.ModuleValues, }), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, @@ -6391,8 +6390,8 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency } #endregion - #region MenuGroup - listFormName = AppCodes.Menus.MenuGroup; + #region Module + listFormName = AppCodes.Menus.Module; if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) { var listForm = await _listFormRepository.InsertAsync( @@ -6414,7 +6413,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency IsOrganizationUnit = false, Description = $"{listFormName}.Description", SelectCommandType = SelectCommandTypeEnum.Table, - SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.MenuGroup)), + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Module)), KeyFieldName = "Id", KeyFieldDbSourceType = DbType.String, SortMode = GridOptions.SortModeSingle, @@ -6430,11 +6429,10 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency EditingFormJson = JsonSerializer.Serialize(new List { new() { Order = 1, ColCount = 1, ColSpan = 1, ItemType = "group" }, - }), - InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(DbType.String, "Name"), + }) }); - #region MenuGroup Fields + #region Module Fields await _listFormFieldRepository.InsertManyAsync([ new() { ListFormCode = listForm.ListFormCode, @@ -6816,17 +6814,25 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, SourceDbType = DbType.String, - FieldName = "ShortName", + FieldName = "ModuleId", EditGroupOrderNo = 1, EditOrderNo = 12, - EditorType2 = EditorTypes.dxTextBox, + EditorType2 = EditorTypes.dxSelectBox, ColSpan = 1, - CaptionName = "App.Listform.ListformField.ShortName", + EditorOptions = EditorOptions.ShowClearButton(), + CaptionName = "App.Listform.ListformField.ModuleId", Width = 0, ListOrderNo = 13, Visible = true, IsActive = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + DisplayExpr = "name", + ValueExpr = "key", + LookupQuery = LookupQueryValues.ModuleValues, + }), AllowSearch = true, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/MenuDataSeeder.cs b/api/src/Sozsoft.Platform.DbMigrator/Migrations/MenuDataSeeder.cs index 164b1def..d388c69f 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/MenuDataSeeder.cs +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/MenuDataSeeder.cs @@ -21,7 +21,7 @@ public class RouteSeedDto public string[] Authority { get; set; } } -public class MenuGroupSeedDto +public class ModuleSeedDto { public string Name { get; set; } } @@ -36,31 +36,31 @@ public class MenuSeedDto public string Icon { get; set; } public string RequiredPermissionName { get; set; } public bool IsDisabled { get; set; } - public string ShortName { get; set; } + public string ModuleId { get; set; } } public class MenuSeederDto { public List Routes { get; set; } + public List Modules { get; set; } public List Menus { get; set; } - public List MenuGroups { get; set; } } public class MenuDataSeeder : IDataSeedContributor, ITransientDependency { private readonly IRepository _routeRepository; private readonly IRepository _menuRepository; - private readonly IRepository _menuGroupRepository; + private readonly IRepository _moduleRepository; public MenuDataSeeder( IRepository routeRepository, IRepository menuRepository, - IRepository menuGroupRepository + IRepository moduleRepository ) { _routeRepository = routeRepository; _menuRepository = menuRepository; - _menuGroupRepository = menuGroupRepository; + _moduleRepository = moduleRepository; } public async Task SeedAsync(DataSeedContext context) @@ -89,13 +89,13 @@ public class MenuDataSeeder : IDataSeedContributor, ITransientDependency } } - foreach (var item in items.MenuGroups) + foreach (var item in items.Modules) { - var exists = await _menuGroupRepository.AnyAsync(x => x.Name == item.Name); + var exists = await _moduleRepository.AnyAsync(x => x.Name == item.Name); if (!exists) { - await _menuGroupRepository.InsertAsync(new MenuGroup(item.Name) + await _moduleRepository.InsertAsync(new Module(item.Name) { Name = item.Name }, autoSave: true); @@ -108,6 +108,10 @@ public class MenuDataSeeder : IDataSeedContributor, ITransientDependency if (!exists) { + // Menunun bagli oldugu modul Modules bolumunde tanimli degilse burada olusturulur; + // aksi halde ModuleId yabanci anahtari seed sirasinda hata verir. + await EnsureModuleAsync(item.ModuleId); + await _menuRepository.InsertAsync(new Menu { ParentCode = string.IsNullOrWhiteSpace(item.ParentCode) ? null : item.ParentCode, @@ -118,9 +122,25 @@ public class MenuDataSeeder : IDataSeedContributor, ITransientDependency Icon = item.Icon, RequiredPermissionName = item.RequiredPermissionName, IsDisabled = item.IsDisabled, - ShortName = item.ShortName + ModuleId = item.ModuleId }, autoSave: true); } } } + + private async Task EnsureModuleAsync(string moduleId) + { + var cleaned = moduleId?.Trim(); + if (string.IsNullOrWhiteSpace(cleaned)) + { + return; + } + + if (await _moduleRepository.AnyAsync(x => x.Id == cleaned)) + { + return; + } + + await _moduleRepository.InsertAsync(new Module(cleaned) { Name = cleaned }, autoSave: true); + } } diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/MenusData.json b/api/src/Sozsoft.Platform.DbMigrator/Migrations/MenusData.json index a61b3838..87577b0d 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/MenusData.json +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/MenusData.json @@ -457,12 +457,12 @@ "authority": ["App.Videoroom.Detail"] } ], - "MenuGroups": [ + "Modules": [ { - "Name": "Erp" + "Name": "Sas" }, { - "Name": "Kurs" + "Name": "Adm" } ], "Menus": [ @@ -475,7 +475,7 @@ "Icon": "FcPodiumWithAudience", "RequiredPermissionName": null, "IsDisabled": false, - "ShortName": "Sas" + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -485,7 +485,8 @@ "Url": null, "Icon": "FcFilingCabinet", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -495,7 +496,8 @@ "Url": "/admin/list/App.Definitions.AiBot", "Icon": "FcMindMap", "RequiredPermissionName": "App.Definitions.AiBot", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -505,7 +507,8 @@ "Url": "/admin/list/App.Definitions.GlobalSearch", "Icon": "FcSearch", "RequiredPermissionName": "App.Definitions.GlobalSearch", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -515,7 +518,8 @@ "Url": "/admin/list/App.Definitions.ContactTitle", "Icon": "FcNeutralDecision", "RequiredPermissionName": "App.Definitions.ContactTitle", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -525,7 +529,8 @@ "Url": "/admin/list/App.Definitions.Currency", "Icon": "FcCurrencyExchange", "RequiredPermissionName": "App.Definitions.Currency", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -535,7 +540,8 @@ "Url": "/admin/list/App.Definitions.CountryGroup", "Icon": "FaFlag", "RequiredPermissionName": "App.Definitions.CountryGroup", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -545,7 +551,8 @@ "Url": "/admin/list/App.Definitions.Country", "Icon": "FaFlagCheckered", "RequiredPermissionName": "App.Definitions.Country", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -555,7 +562,8 @@ "Url": "/admin/list/App.Definitions.City", "Icon": "FaFontAwesomeFlag", "RequiredPermissionName": "App.Definitions.City", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -565,7 +573,8 @@ "Url": "/admin/list/App.Definitions.District", "Icon": "FaFontAwesome", "RequiredPermissionName": "App.Definitions.District", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -575,7 +584,8 @@ "Url": "/admin/list/App.Definitions.SkillType", "Icon": "FcMindMap", "RequiredPermissionName": "App.Definitions.SkillType", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -585,7 +595,8 @@ "Url": "/admin/list/App.Definitions.UomCategory", "Icon": "FcWorkflow", "RequiredPermissionName": "App.Definitions.UomCategory", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas.Definitions", @@ -595,7 +606,8 @@ "Url": "/admin/list/App.Definitions.Sequence", "Icon": "FcNumericalSorting12", "RequiredPermissionName": "App.Definitions.Sequence", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -605,7 +617,8 @@ "Url": null, "Icon": "FcTemplate", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -615,7 +628,8 @@ "Url": "/admin/public/home/designer", "Icon": "FcHome", "RequiredPermissionName": "App.Home", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -625,7 +639,8 @@ "Url": "/admin/public/about/designer", "Icon": "FcAbout", "RequiredPermissionName": "App.About", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -635,7 +650,8 @@ "Url": "/admin/public/services/designer", "Icon": "FcServices", "RequiredPermissionName": "App.Services", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -645,7 +661,8 @@ "Url": "/admin/list/App.Orders.Products", "Icon": "FcDiploma1", "RequiredPermissionName": "App.Orders.Products", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -655,7 +672,8 @@ "Url": "/admin/list/App.Orders.PaymentMethods", "Icon": "FcFeedIn", "RequiredPermissionName": "App.Orders.PaymentMethods", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -665,7 +683,8 @@ "Url": "/admin/list/App.Orders.InstallmentOptions", "Icon": "FcProcess", "RequiredPermissionName": "App.Orders.InstallmentOptions", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -675,7 +694,8 @@ "Url": "/admin/list/App.Orders.SalesOrders", "Icon": "FcCollect", "RequiredPermissionName": "App.Orders.SalesOrders", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -685,7 +705,8 @@ "Url": "/admin/list/App.BlogManagement.Category", "Icon": "FaCertificate", "RequiredPermissionName": "App.BlogManagement.Category", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -695,7 +716,8 @@ "Url": "/admin/list/App.BlogManagement.Posts", "Icon": "FaWeixin", "RequiredPermissionName": "App.BlogManagement.Posts", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -705,7 +727,8 @@ "Url": "/admin/list/App.Demos", "Icon": "FcMissedCall", "RequiredPermissionName": "App.Demos", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Public", @@ -715,7 +738,8 @@ "Url": "/admin/public/contact/designer", "Icon": "FcContacts", "RequiredPermissionName": "App.Contact", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -725,7 +749,8 @@ "Url": "/admin/list/App.DevRequests", "Icon": "FcIdea", "RequiredPermissionName": "App.DevRequests", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -735,7 +760,8 @@ "Url": "/admin/list/AbpTenantManagement.Tenants", "Icon": "FcDepartment", "RequiredPermissionName": "AbpTenantManagement.Tenants", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -745,7 +771,8 @@ "Url": "/admin/list/App.Branches", "Icon": "FcTreeStructure", "RequiredPermissionName": "App.Branches", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -755,7 +782,8 @@ "Url": "/admin/list/App.SettingDefinitions", "Icon": "FcSupport", "RequiredPermissionName": "App.SettingDefinitions", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -765,7 +793,8 @@ "Url": null, "Icon": "FcGlobe", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Languages", @@ -775,7 +804,8 @@ "Url": "/admin/list/App.Languages.Language", "Icon": "FcGraduationCap", "RequiredPermissionName": "App.Languages.Language", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Languages", @@ -785,7 +815,8 @@ "Url": "/admin/list/App.Languages.LanguageText", "Icon": "FcMindMap", "RequiredPermissionName": "App.Languages.LanguageText", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -795,7 +826,8 @@ "Url": "/admin/list/App.DataSource", "Icon": "FcAcceptDatabase", "RequiredPermissionName": "App.DataSource", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -805,7 +837,8 @@ "Url": null, "Icon": "FcWorkflow", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Notifications", @@ -815,7 +848,8 @@ "Url": "/admin/list/App.Notifications.NotificationTypes", "Icon": "FcComboChart", "RequiredPermissionName": "App.Notifications.NotificationTypes", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Notifications", @@ -825,7 +859,8 @@ "Url": "/admin/list/App.Notifications.NotificationRules", "Icon": "FcLibrary", "RequiredPermissionName": "App.Notifications.NotificationRules", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Notifications", @@ -835,7 +870,8 @@ "Url": "/admin/list/App.Notifications.Notification", "Icon": "FcBrokenLink", "RequiredPermissionName": "App.Notifications.Notification", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { @@ -846,7 +882,8 @@ "Url": null, "Icon": "FcSynchronize", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.BackgroundWorkers", @@ -856,7 +893,8 @@ "Url": "/admin/list/App.BackgroundWorkers.RecurringJobs", "Icon": "FcDataConfiguration", "RequiredPermissionName": "App.BackgroundWorkers.RecurringJobs", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.BackgroundWorkers", @@ -866,7 +904,8 @@ "Url": "/admin/list/App.BackgroundWorkers.Jobs", "Icon": "FcFlowChart", "RequiredPermissionName": "App.BackgroundWorkers.Jobs", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -876,27 +915,30 @@ "Url": null, "Icon": "FcParallelTasks", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" + }, + { + "ParentCode": "App.Menus", + "Code": "App.Menus.Module", + "DisplayName": "App.Menus.Module", + "Order": 1, + "Url": "/admin/list/App.Menus.Module", + "Icon": "FcGrid", + "RequiredPermissionName": "App.Menus.Module", + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Menus", "Code": "App.Menus.Routes", "DisplayName": "App.Menus.Routes", - "Order": 1, + "Order": 2, "Url": "/admin/list/App.Menus.Routes", "Icon": "FcMultipleInputs", "RequiredPermissionName": "App.Menus.Routes", - "IsDisabled": false - }, - { - "ParentCode": "App.Menus", - "Code": "App.Menus.MenuGroup", - "DisplayName": "App.Menus.MenuGroup", - "Order": 2, - "Url": "/admin/list/App.Menus.MenuGroup", - "Icon": "FcGrid", - "RequiredPermissionName": "App.Menus.MenuGroup", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Menus", @@ -906,7 +948,8 @@ "Url": "/admin/list/App.Menus.Menu", "Icon": "FcMenu", "RequiredPermissionName": "App.Menus.Menu", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Menus", @@ -916,7 +959,8 @@ "Url": "/admin/menuManager", "Icon": "FaRegListAlt", "RequiredPermissionName": "App.Menus.Manager", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -926,7 +970,8 @@ "Url": null, "Icon": "FcAndroidOs", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.DeveloperKit", @@ -936,7 +981,8 @@ "Url": "/admin/sqlQueryManager", "Icon": "FaDatabase", "RequiredPermissionName": "App.SqlQueryManager", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.DeveloperKit", @@ -946,7 +992,8 @@ "Url": "/admin/list/App.DeveloperKit.CustomEndpoints", "Icon": "FcMindMap", "RequiredPermissionName": "App.DeveloperKit.CustomEndpoints", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.DeveloperKit", @@ -956,7 +1003,8 @@ "Url": "/admin/developerkit/dynamic-services", "Icon": "FcCommandLine", "RequiredPermissionName": "App.DeveloperKit.DynamicServices", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.DeveloperKit", @@ -966,7 +1014,8 @@ "Url": "/admin/developerkit/components", "Icon": "FcBiohazard", "RequiredPermissionName": "App.DeveloperKit.Components", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.DeveloperKit", @@ -976,7 +1025,8 @@ "Url": "/admin/list/App.Listforms.Listform", "Icon": "FcDataSheet", "RequiredPermissionName": "App.Listforms.Listform", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.DeveloperKit", @@ -986,7 +1036,8 @@ "Url": "/admin/listform/wizardManager", "Icon": "FcFlashAuto", "RequiredPermissionName": "App.Listforms.Wizard", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": "App.Saas", @@ -996,7 +1047,8 @@ "Url": "/admin/forumManagement", "Icon": "FcReading", "RequiredPermissionName": "App.ForumManagement", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Sas" }, { "ParentCode": null, @@ -1007,7 +1059,7 @@ "Icon": "FcOrganization", "RequiredPermissionName": null, "IsDisabled": false, - "ShortName": "Adm" + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1017,7 +1069,8 @@ "Url": null, "Icon": "FcFilingCabinet", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Definitions", @@ -1027,7 +1080,8 @@ "Url": "/admin/list/App.Definitions.Sector", "Icon": "FcBiomass", "RequiredPermissionName": "App.Definitions.Sector", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Definitions", @@ -1037,7 +1091,8 @@ "Url": "/admin/list/App.Definitions.Department", "Icon": "FcDepartment", "RequiredPermissionName": "App.Definitions.Department", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Definitions", @@ -1047,7 +1102,8 @@ "Url": "/admin/list/App.Definitions.JobPosition", "Icon": "FcDebt", "RequiredPermissionName": "App.Definitions.JobPosition", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Definitions", @@ -1057,7 +1113,8 @@ "Url": "/admin/organization", "Icon": "FaSitemap", "RequiredPermissionName": "App.Definitions.OrgChart", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1067,7 +1124,8 @@ "Url": "/admin/form/App.Licence", "Icon": "FcRules", "RequiredPermissionName": "App.Licence", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1077,7 +1135,8 @@ "Url": "/admin/list/App.DevRequest", "Icon": "FcIdea", "RequiredPermissionName": "App.DevRequest", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1087,7 +1146,8 @@ "Url": "/admin/list/App.Agenda", "Icon": "FcPlanner", "RequiredPermissionName": "App.Agenda", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1097,7 +1157,8 @@ "Url": "/admin/settings", "Icon": "FcSettings", "RequiredPermissionName": "App.Setting", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1107,7 +1168,8 @@ "Url": null, "Icon": "FcConferenceCall", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Intranet", @@ -1117,7 +1179,8 @@ "Url": "/admin/list/App.Intranet.Announcement", "Icon": "FcAdvertising", "RequiredPermissionName": "App.Intranet.Announcement", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Intranet", @@ -1127,7 +1190,8 @@ "Url": "/admin/list/App.Intranet.Survey", "Icon": "FcTodoList", "RequiredPermissionName": "App.Intranet.Survey", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Intranet", @@ -1137,7 +1201,8 @@ "Url": "/admin/list/App.Intranet.SocialPost", "Icon": "FcComments", "RequiredPermissionName": "App.Intranet.SocialPost", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Intranet", @@ -1147,7 +1212,8 @@ "Url": "/admin/list/App.Intranet.Events.EventType", "Icon": "FcPlanner", "RequiredPermissionName": "App.Intranet.Events.EventType", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Intranet", @@ -1157,7 +1223,8 @@ "Url": "/admin/list/App.Intranet.Events.EventCategory", "Icon": "FcTreeStructure", "RequiredPermissionName": "App.Intranet.Events.EventCategory", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Intranet", @@ -1167,7 +1234,8 @@ "Url": "/admin/list/App.Intranet.Events.Event", "Icon": "FcCalendar", "RequiredPermissionName": "App.Intranet.Events.Event", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1177,7 +1245,8 @@ "Url": null, "Icon": "FaLock", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Restrictions", @@ -1187,7 +1256,8 @@ "Url": "/admin/list/App.Restrictions.WorkHour", "Icon": "FcClock", "RequiredPermissionName": "App.Restrictions.WorkHour", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration.Restrictions", @@ -1197,7 +1267,8 @@ "Url": "/admin/list/App.Restrictions.IpRestrictions", "Icon": "FcNfcSign", "RequiredPermissionName": "App.Restrictions.IpRestrictions", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1207,7 +1278,8 @@ "Url": null, "Icon": "FcConferenceCall", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "Abp.Identity", @@ -1217,7 +1289,8 @@ "Url": "/admin/list/Abp.Identity.PermissionGroups", "Icon": "FcEngineering", "RequiredPermissionName": "Abp.Identity.PermissionGroups", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "Abp.Identity", @@ -1227,7 +1300,8 @@ "Url": "/admin/list/Abp.Identity.Permissions", "Icon": "FcSupport", "RequiredPermissionName": "Abp.Identity.Permissions", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "Abp.Identity", @@ -1237,7 +1311,8 @@ "Url": "/admin/list/App.IdentityManagement.ClaimType", "Icon": "FcOrganization", "RequiredPermissionName": "App.IdentityManagement.ClaimType", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "Abp.Identity", @@ -1247,7 +1322,8 @@ "Url": "/admin/list/AbpIdentity.Roles", "Icon": "FcFlowChart", "RequiredPermissionName": "AbpIdentity.Roles", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "Abp.Identity", @@ -1257,7 +1333,8 @@ "Url": "/admin/list/AbpIdentity.Users", "Icon": "FcBusinessman", "RequiredPermissionName": "AbpIdentity.Users", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "Abp.Identity", @@ -1267,7 +1344,8 @@ "Url": "/admin/ous", "Icon": "FcOrganization", "RequiredPermissionName": "Abp.Identity.OrganizationUnits", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "Abp.Identity", @@ -1277,7 +1355,8 @@ "Url": "/admin/list/App.IdentityManagement.AuditLogs", "Icon": "FcMultipleInputs", "RequiredPermissionName": "App.IdentityManagement.AuditLogs", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "Abp.Identity", @@ -1287,7 +1366,8 @@ "Url": "/admin/list/App.IdentityManagement.Sessions", "Icon": "FcPrivacy", "RequiredPermissionName": "App.IdentityManagement.Sessions", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1297,7 +1377,8 @@ "Url": null, "Icon": "FcDocument", "RequiredPermissionName": null, - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Reports.Management", @@ -1307,7 +1388,8 @@ "Url": "/admin/list/App.Reports.Categories", "Icon": "FcProcess", "RequiredPermissionName": "App.Reports.Categories", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Reports.Management", @@ -1317,7 +1399,8 @@ "Url": "/admin/list/App.Reports.ReportTemplates", "Icon": "FcSimCardChip", "RequiredPermissionName": "App.Reports.ReportTemplates", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1327,7 +1410,8 @@ "Url": "/admin/videoroom/dashboard", "Icon": "FcVideoCall", "RequiredPermissionName": "App.Videoroom", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1337,7 +1421,8 @@ "Url": "/admin/files", "Icon": "FcFolder", "RequiredPermissionName": "App.Files", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" }, { "ParentCode": "App.Administration", @@ -1347,7 +1432,8 @@ "Url": "/admin/forum", "Icon": "FcLink", "RequiredPermissionName": "App.ForumManagement.Publish", - "IsDisabled": false + "IsDisabled": false, + "ModuleId": "Adm" } ] } diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/PermissionDataSeeder.cs b/api/src/Sozsoft.Platform.DbMigrator/Migrations/PermissionDataSeeder.cs index ebcde8a3..6dbac692 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/PermissionDataSeeder.cs +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/PermissionDataSeeder.cs @@ -70,7 +70,7 @@ public class PermissionDataSeeder : IDataSeedContributor, ITransientDependency MultiTenancySide = (MultiTenancySides)item.MultiTenancySide, }; - perm.SetMenuGroup(item.MenuGroup); + perm.SetModules(item.Modules); await _permissionRepository.InsertAsync(perm, autoSave: true); } diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/PermissionsData.json b/api/src/Sozsoft.Platform.DbMigrator/Migrations/PermissionsData.json index 3baf3641..084cafe0 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/PermissionsData.json +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/PermissionsData.json @@ -7,282 +7,26 @@ { "Name": "App.Administration", "DisplayName": "App.Administration" - }, - { - "Name": "App.Setup", - "DisplayName": "App.Setup" } ], "PermissionDefinitionRecords": [ { - "GroupName": "App.Setup", - "Name": "App.Setup.Migrate", + "GroupName": "App.Saas", + "Name": "App.Saas.Definitions", "ParentName": null, - "DisplayName": "App.Setup.Migrate", + "DisplayName": "App.Platform.Definitions", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "AbpTenantManagement.Tenants", - "ParentName": null, - "DisplayName": "AbpTenantManagement.Tenants", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "AbpTenantManagement.Tenants.Create", - "ParentName": "AbpTenantManagement.Tenants", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "AbpTenantManagement.Tenants.Delete", - "ParentName": "AbpTenantManagement.Tenants", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "AbpTenantManagement.Tenants.Export", - "ParentName": "AbpTenantManagement.Tenants", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "AbpTenantManagement.Tenants.Import", - "ParentName": "AbpTenantManagement.Tenants", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "AbpTenantManagement.Tenants.ManageConnectionStrings", - "ParentName": "AbpTenantManagement.Tenants", - "DisplayName": "AbpTenantManagement.Tenants.ManageConnectionStrings", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "AbpTenantManagement.Tenants.ManageFeatures", - "ParentName": "AbpTenantManagement.Tenants", - "DisplayName": "AbpTenantManagement.Tenants.ManageFeatures", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "AbpTenantManagement.Tenants.Update", - "ParentName": "AbpTenantManagement.Tenants", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "AbpTenantManagement.Tenants.Note", - "ParentName": "AbpTenantManagement.Tenants", - "DisplayName": "Note", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DevRequests", - "ParentName": null, - "DisplayName": "App.DevRequests", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DevRequests.Create", - "ParentName": "App.DevRequests", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DevRequests.Update", - "ParentName": "App.DevRequests", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DevRequests.Delete", - "ParentName": "App.DevRequests", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DevRequests.Export", - "ParentName": "App.DevRequests", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DevRequests.Import", - "ParentName": "App.DevRequests", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DevRequests.Note", - "ParentName": "App.DevRequests", - "DisplayName": "Note", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Branches", - "ParentName": null, - "DisplayName": "App.Branches", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Branches.Create", - "ParentName": "App.Branches", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Branches.Delete", - "ParentName": "App.Branches", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Branches.Export", - "ParentName": "App.Branches", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Branches.Import", - "ParentName": "App.Branches", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Branches.Update", - "ParentName": "App.Branches", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Definitions.GlobalSearch", - "ParentName": null, - "DisplayName": "App.Definitions.GlobalSearch", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Definitions.GlobalSearch.Create", - "ParentName": "App.Definitions.GlobalSearch", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Definitions.GlobalSearch.Delete", - "ParentName": "App.Definitions.GlobalSearch", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Definitions.GlobalSearch.Export", - "ParentName": "App.Definitions.GlobalSearch", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Definitions.GlobalSearch.Import", - "ParentName": "App.Definitions.GlobalSearch", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Definitions.GlobalSearch.Update", - "ParentName": "App.Definitions.GlobalSearch", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.AiBot", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.AiBot", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -291,7 +35,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -300,7 +44,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -309,7 +53,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -318,7 +62,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -327,7 +71,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -336,16 +80,70 @@ "DisplayName": "App.Definitions.AiBot.Asistant", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Definitions.GlobalSearch", + "ParentName": "App.Saas.Definitions", + "DisplayName": "App.Definitions.GlobalSearch", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Definitions.GlobalSearch.Create", + "ParentName": "App.Definitions.GlobalSearch", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Definitions.GlobalSearch.Delete", + "ParentName": "App.Definitions.GlobalSearch", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Definitions.GlobalSearch.Export", + "ParentName": "App.Definitions.GlobalSearch", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Definitions.GlobalSearch.Import", + "ParentName": "App.Definitions.GlobalSearch", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Definitions.GlobalSearch.Update", + "ParentName": "App.Definitions.GlobalSearch", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.ContactTitle", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.ContactTitle", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -354,7 +152,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -363,7 +161,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -372,7 +170,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -381,7 +179,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -390,16 +188,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.Currency", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.Currency", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -408,7 +206,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -417,7 +215,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -426,7 +224,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -435,7 +233,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -444,16 +242,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.CountryGroup", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.CountryGroup", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -462,7 +260,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -471,7 +269,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -480,7 +278,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -489,7 +287,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -498,16 +296,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.Country", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.Country", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -516,7 +314,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -525,7 +323,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -534,7 +332,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -543,7 +341,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -552,16 +350,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.City", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.City", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -570,7 +368,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -579,7 +377,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -588,7 +386,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -597,7 +395,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -606,16 +404,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.District", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.District", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -624,7 +422,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -633,7 +431,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -642,7 +440,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -651,7 +449,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -660,16 +458,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.SkillType", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.SkillType", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -678,7 +476,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -687,7 +485,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -696,7 +494,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -705,7 +503,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -714,7 +512,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -723,16 +521,16 @@ "DisplayName": "Note", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.SkillLevel", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.SkillLevel", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -741,7 +539,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -750,7 +548,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -759,7 +557,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -768,7 +566,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -777,16 +575,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.Skill", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.Skill", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -795,7 +593,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -804,7 +602,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -813,7 +611,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -822,7 +620,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -831,16 +629,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.UomCategory", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.UomCategory", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -849,7 +647,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -858,7 +656,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -867,7 +665,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -876,7 +674,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -885,7 +683,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -894,16 +692,16 @@ "DisplayName": "Note", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.Uom", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.Uom", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -912,7 +710,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -921,7 +719,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -930,7 +728,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -939,7 +737,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -948,16 +746,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Definitions.Sequence", - "ParentName": null, + "ParentName": "App.Saas.Definitions", "DisplayName": "App.Definitions.Sequence", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -966,7 +764,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -975,7 +773,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -984,7 +782,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -993,7 +791,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1002,619 +800,25 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", - "Name": "App.SettingDefinitions", + "Name": "App.Public", "ParentName": null, - "DisplayName": "App.SettingDefinitions", + "DisplayName": "App.Public", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.SettingDefinitions.Create", - "ParentName": "App.SettingDefinitions", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.SettingDefinitions.Delete", - "ParentName": "App.SettingDefinitions", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.SettingDefinitions.Export", - "ParentName": "App.SettingDefinitions", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.SettingDefinitions.Import", - "ParentName": "App.SettingDefinitions", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.SettingDefinitions.Update", - "ParentName": "App.SettingDefinitions", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.Language", - "ParentName": null, - "DisplayName": "App.Languages.Language", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.Language.Create", - "ParentName": "App.Languages.Language", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.Language.Delete", - "ParentName": "App.Languages.Language", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.Language.Export", - "ParentName": "App.Languages.Language", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.Language.Import", - "ParentName": "App.Languages.Language", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.Language.Note", - "ParentName": "App.Languages.Language", - "DisplayName": "Note", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.Language.Update", - "ParentName": "App.Languages.Language", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.LanguageText", - "ParentName": null, - "DisplayName": "App.Languages.LanguageText", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.LanguageText.Create", - "ParentName": "App.Languages.LanguageText", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.LanguageText.Delete", - "ParentName": "App.Languages.LanguageText", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.LanguageText.Export", - "ParentName": "App.Languages.LanguageText", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.LanguageText.Import", - "ParentName": "App.Languages.LanguageText", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Languages.LanguageText.Update", - "ParentName": "App.Languages.LanguageText", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DataSource", - "ParentName": null, - "DisplayName": "App.DataSource", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DataSource.Create", - "ParentName": "App.DataSource", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DataSource.Delete", - "ParentName": "App.DataSource", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DataSource.Export", - "ParentName": "App.DataSource", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DataSource.Import", - "ParentName": "App.DataSource", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DataSource.Update", - "ParentName": "App.DataSource", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.Listform", - "ParentName": null, - "DisplayName": "App.Listforms.Listform", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.Listform.Create", - "ParentName": "App.Listforms.Listform", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.Listform.Delete", - "ParentName": "App.Listforms.Listform", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.Listform.Export", - "ParentName": "App.Listforms.Listform", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.Listform.Import", - "ParentName": "App.Listforms.Listform", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.Listform.Update", - "ParentName": "App.Listforms.Listform", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.ListformField", - "ParentName": null, - "DisplayName": "App.Listforms.ListformField", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.ListformField.Create", - "ParentName": "App.Listforms.ListformField", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.ListformField.Delete", - "ParentName": "App.Listforms.ListformField", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.ListformField.Export", - "ParentName": "App.Listforms.ListformField", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.ListformField.Import", - "ParentName": "App.Listforms.ListformField", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Listforms.ListformField.Update", - "ParentName": "App.Listforms.ListformField", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationTypes", - "ParentName": null, - "DisplayName": "App.Notifications.NotificationTypes", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationTypes.Create", - "ParentName": "App.Notifications.NotificationTypes", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationTypes.Delete", - "ParentName": "App.Notifications.NotificationTypes", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationTypes.Export", - "ParentName": "App.Notifications.NotificationTypes", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationTypes.Import", - "ParentName": "App.Notifications.NotificationTypes", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationTypes.Update", - "ParentName": "App.Notifications.NotificationTypes", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationRules", - "ParentName": null, - "DisplayName": "App.Notifications.NotificationRules", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationRules.Create", - "ParentName": "App.Notifications.NotificationRules", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationRules.Delete", - "ParentName": "App.Notifications.NotificationRules", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationRules.Export", - "ParentName": "App.Notifications.NotificationRules", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationRules.Import", - "ParentName": "App.Notifications.NotificationRules", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.NotificationRules.Update", - "ParentName": "App.Notifications.NotificationRules", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.Notification", - "ParentName": null, - "DisplayName": "App.Notifications.Notification", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.Notification.Create", - "ParentName": "App.Notifications.Notification", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.Notification.Delete", - "ParentName": "App.Notifications.Notification", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.Notification.Export", - "ParentName": "App.Notifications.Notification", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.Notification.Import", - "ParentName": "App.Notifications.Notification", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Notifications.Notification.Update", - "ParentName": "App.Notifications.Notification", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.RecurringJobs", - "ParentName": null, - "DisplayName": "App.BackgroundWorkers.RecurringJobs", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.RecurringJobs.Create", - "ParentName": "App.BackgroundWorkers.RecurringJobs", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.RecurringJobs.Delete", - "ParentName": "App.BackgroundWorkers.RecurringJobs", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.RecurringJobs.Export", - "ParentName": "App.BackgroundWorkers.RecurringJobs", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.RecurringJobs.Import", - "ParentName": "App.BackgroundWorkers.RecurringJobs", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.RecurringJobs.Update", - "ParentName": "App.BackgroundWorkers.RecurringJobs", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.Jobs", - "ParentName": null, - "DisplayName": "App.BackgroundWorkers.Jobs", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.Jobs.Create", - "ParentName": "App.BackgroundWorkers.Jobs", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.Jobs.Delete", - "ParentName": "App.BackgroundWorkers.Jobs", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.Jobs.Export", - "ParentName": "App.BackgroundWorkers.Jobs", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.Jobs.Import", - "ParentName": "App.BackgroundWorkers.Jobs", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.BackgroundWorkers.Jobs.Update", - "ParentName": "App.BackgroundWorkers.Jobs", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Home", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.Home", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1623,16 +827,16 @@ "DisplayName": "Design", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.About", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.About", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1641,16 +845,16 @@ "DisplayName": "Design", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Services", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.Services", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1659,16 +863,16 @@ "DisplayName": "Design", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Orders.Products", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.Orders.Products", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1677,7 +881,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1686,7 +890,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1695,7 +899,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1704,7 +908,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1713,16 +917,16 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Orders.PaymentMethods", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.Orders.PaymentMethods", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1731,7 +935,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1740,7 +944,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1749,7 +953,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1758,7 +962,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1767,16 +971,16 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Orders.InstallmentOptions", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.Orders.InstallmentOptions", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1785,7 +989,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1794,7 +998,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1803,7 +1007,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1812,7 +1016,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1821,16 +1025,16 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Orders.SalesOrders", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.Orders.SalesOrders", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1839,7 +1043,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1848,7 +1052,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1857,7 +1061,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1866,7 +1070,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1875,7 +1079,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1884,16 +1088,16 @@ "DisplayName": "Note", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Orders.SalesOrderItem", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.Orders.SalesOrderItem", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1902,7 +1106,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1911,7 +1115,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1920,7 +1124,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1929,7 +1133,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1938,16 +1142,16 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.BlogManagement.Category", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.BlogManagement.Category", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1956,16 +1160,16 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { - "GroupName": "App.Administration", + "GroupName": "App.Saas", "Name": "App.BlogManagement.Category.Delete", "ParentName": "App.BlogManagement.Category", "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1974,7 +1178,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1983,7 +1187,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -1992,16 +1196,16 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.BlogManagement.Posts", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.BlogManagement.Posts", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2010,7 +1214,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2019,7 +1223,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2028,7 +1232,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2037,7 +1241,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2046,7 +1250,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2055,16 +1259,16 @@ "DisplayName": "Publish", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Demos", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.Demos", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2073,7 +1277,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2082,7 +1286,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2091,7 +1295,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2100,7 +1304,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2109,16 +1313,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Contact", - "ParentName": null, + "ParentName": "App.Public", "DisplayName": "App.Contact", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2127,16 +1331,801 @@ "DisplayName": "Design", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DevRequests", + "ParentName": null, + "DisplayName": "App.DevRequests", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DevRequests.Create", + "ParentName": "App.DevRequests", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DevRequests.Update", + "ParentName": "App.DevRequests", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DevRequests.Delete", + "ParentName": "App.DevRequests", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DevRequests.Export", + "ParentName": "App.DevRequests", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DevRequests.Import", + "ParentName": "App.DevRequests", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DevRequests.Note", + "ParentName": "App.DevRequests", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + + { + "GroupName": "App.Saas", + "Name": "AbpTenantManagement.Tenants", + "ParentName": null, + "DisplayName": "AbpTenantManagement.Tenants", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "AbpTenantManagement.Tenants.Create", + "ParentName": "AbpTenantManagement.Tenants", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "AbpTenantManagement.Tenants.Delete", + "ParentName": "AbpTenantManagement.Tenants", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "AbpTenantManagement.Tenants.Export", + "ParentName": "AbpTenantManagement.Tenants", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "AbpTenantManagement.Tenants.Import", + "ParentName": "AbpTenantManagement.Tenants", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "AbpTenantManagement.Tenants.ManageConnectionStrings", + "ParentName": "AbpTenantManagement.Tenants", + "DisplayName": "AbpTenantManagement.Tenants.ManageConnectionStrings", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "AbpTenantManagement.Tenants.ManageFeatures", + "ParentName": "AbpTenantManagement.Tenants", + "DisplayName": "AbpTenantManagement.Tenants.ManageFeatures", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "AbpTenantManagement.Tenants.Update", + "ParentName": "AbpTenantManagement.Tenants", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "AbpTenantManagement.Tenants.Note", + "ParentName": "AbpTenantManagement.Tenants", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + + { + "GroupName": "App.Saas", + "Name": "App.Branches", + "ParentName": null, + "DisplayName": "App.Branches", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Branches.Create", + "ParentName": "App.Branches", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Branches.Delete", + "ParentName": "App.Branches", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Branches.Export", + "ParentName": "App.Branches", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Branches.Import", + "ParentName": "App.Branches", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Branches.Update", + "ParentName": "App.Branches", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.SettingDefinitions", + "ParentName": null, + "DisplayName": "App.SettingDefinitions", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.SettingDefinitions.Create", + "ParentName": "App.SettingDefinitions", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.SettingDefinitions.Delete", + "ParentName": "App.SettingDefinitions", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.SettingDefinitions.Export", + "ParentName": "App.SettingDefinitions", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.SettingDefinitions.Import", + "ParentName": "App.SettingDefinitions", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.SettingDefinitions.Update", + "ParentName": "App.SettingDefinitions", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages", + "ParentName": null, + "DisplayName": "App.Languages", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.Language", + "ParentName": "App.Languages", + "DisplayName": "App.Languages.Language", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.Language.Create", + "ParentName": "App.Languages.Language", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.Language.Delete", + "ParentName": "App.Languages.Language", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.Language.Export", + "ParentName": "App.Languages.Language", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.Language.Import", + "ParentName": "App.Languages.Language", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.Language.Note", + "ParentName": "App.Languages.Language", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.Language.Update", + "ParentName": "App.Languages.Language", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.LanguageText", + "ParentName": "App.Languages", + "DisplayName": "App.Languages.LanguageText", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.LanguageText.Create", + "ParentName": "App.Languages.LanguageText", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.LanguageText.Delete", + "ParentName": "App.Languages.LanguageText", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.LanguageText.Export", + "ParentName": "App.Languages.LanguageText", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.LanguageText.Import", + "ParentName": "App.Languages.LanguageText", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Languages.LanguageText.Update", + "ParentName": "App.Languages.LanguageText", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DataSource", + "ParentName": null, + "DisplayName": "App.DataSource", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DataSource.Create", + "ParentName": "App.DataSource", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DataSource.Delete", + "ParentName": "App.DataSource", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DataSource.Export", + "ParentName": "App.DataSource", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DataSource.Import", + "ParentName": "App.DataSource", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DataSource.Update", + "ParentName": "App.DataSource", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications", + "ParentName": null, + "DisplayName": "App.Notifications", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationTypes", + "ParentName": "App.Notifications", + "DisplayName": "App.Notifications.NotificationTypes", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationTypes.Create", + "ParentName": "App.Notifications.NotificationTypes", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationTypes.Delete", + "ParentName": "App.Notifications.NotificationTypes", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationTypes.Export", + "ParentName": "App.Notifications.NotificationTypes", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationTypes.Import", + "ParentName": "App.Notifications.NotificationTypes", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationTypes.Update", + "ParentName": "App.Notifications.NotificationTypes", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationRules", + "ParentName": "App.Notifications", + "DisplayName": "App.Notifications.NotificationRules", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationRules.Create", + "ParentName": "App.Notifications.NotificationRules", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationRules.Delete", + "ParentName": "App.Notifications.NotificationRules", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationRules.Export", + "ParentName": "App.Notifications.NotificationRules", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationRules.Import", + "ParentName": "App.Notifications.NotificationRules", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.NotificationRules.Update", + "ParentName": "App.Notifications.NotificationRules", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.Notification", + "ParentName": "App.Notifications", + "DisplayName": "App.Notifications.Notification", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.Notification.Create", + "ParentName": "App.Notifications.Notification", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.Notification.Delete", + "ParentName": "App.Notifications.Notification", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.Notification.Export", + "ParentName": "App.Notifications.Notification", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.Notification.Import", + "ParentName": "App.Notifications.Notification", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Notifications.Notification.Update", + "ParentName": "App.Notifications.Notification", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers", + "ParentName": null, + "DisplayName": "App.BackgroundWorkers", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.RecurringJobs", + "ParentName": "App.BackgroundWorkers", + "DisplayName": "App.BackgroundWorkers.RecurringJobs", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.RecurringJobs.Create", + "ParentName": "App.BackgroundWorkers.RecurringJobs", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.RecurringJobs.Delete", + "ParentName": "App.BackgroundWorkers.RecurringJobs", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.RecurringJobs.Export", + "ParentName": "App.BackgroundWorkers.RecurringJobs", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.RecurringJobs.Import", + "ParentName": "App.BackgroundWorkers.RecurringJobs", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.RecurringJobs.Update", + "ParentName": "App.BackgroundWorkers.RecurringJobs", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.Jobs", + "ParentName": "App.BackgroundWorkers", + "DisplayName": "App.BackgroundWorkers.Jobs", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.Jobs.Create", + "ParentName": "App.BackgroundWorkers.Jobs", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.Jobs.Delete", + "ParentName": "App.BackgroundWorkers.Jobs", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.Jobs.Export", + "ParentName": "App.BackgroundWorkers.Jobs", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.Jobs.Import", + "ParentName": "App.BackgroundWorkers.Jobs", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.BackgroundWorkers.Jobs.Update", + "ParentName": "App.BackgroundWorkers.Jobs", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Menus", + "ParentName": null, + "DisplayName": "App.Menus", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Menus.Module", + "ParentName": "App.Menus", + "DisplayName": "App.Menus.Module", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Menus.Module.Create", + "ParentName": "App.Menus.Module", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Menus.Module.Delete", + "ParentName": "App.Menus.Module", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Menus.Module.Export", + "ParentName": "App.Menus.Module", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Menus.Module.Import", + "ParentName": "App.Menus.Module", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Menus.Module.Update", + "ParentName": "App.Menus.Module", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Menus.Routes", - "ParentName": null, + "ParentName": "App.Menus", "DisplayName": "App.Menus.Routes", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2145,7 +2134,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2154,7 +2143,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2163,7 +2152,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2172,7 +2161,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2181,79 +2170,16 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Menus.Manager", - "ParentName": null, - "DisplayName": "App.Menus.Manager", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Menus.MenuGroup", - "ParentName": null, - "DisplayName": "App.Menus.MenuGroup", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Menus.MenuGroup.Create", - "ParentName": "App.Menus.MenuGroup", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Menus.MenuGroup.Delete", - "ParentName": "App.Menus.MenuGroup", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Menus.MenuGroup.Export", - "ParentName": "App.Menus.MenuGroup", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Menus.MenuGroup.Import", - "ParentName": "App.Menus.MenuGroup", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.Menus.MenuGroup.Update", - "ParentName": "App.Menus.MenuGroup", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", "Name": "App.Menus.Menu", - "ParentName": null, + "ParentName": "App.Menus", "DisplayName": "App.Menus.Menu", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2262,7 +2188,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2271,7 +2197,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2280,7 +2206,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2289,7 +2215,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2298,61 +2224,16 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", - "Name": "App.ForumManagement", - "ParentName": null, - "DisplayName": "App.ForumManagement", + "Name": "App.Menus.Manager", + "ParentName": "App.Menus", + "DisplayName": "App.Menus.Manager", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.ForumManagement.Create", - "ParentName": "App.ForumManagement", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.ForumManagement.Delete", - "ParentName": "App.ForumManagement", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.ForumManagement.Export", - "ParentName": "App.ForumManagement", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.ForumManagement.Import", - "ParentName": "App.ForumManagement", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.ForumManagement.Update", - "ParentName": "App.ForumManagement", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2361,7 +2242,7 @@ "DisplayName": "App.DeveloperKit", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2370,7 +2251,7 @@ "DisplayName": "App.SqlQueryManager", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2379,7 +2260,7 @@ "DisplayName": "App.SqlQueryManager.CrudEndpoints", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2388,7 +2269,7 @@ "DisplayName": "App.DeveloperKit.CustomEndpoints", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2397,7 +2278,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2406,7 +2287,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2415,7 +2296,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2424,7 +2305,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2433,7 +2314,7 @@ "DisplayName": "App.StaticLookup.Get", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2442,7 +2323,7 @@ "DisplayName": "App.StaticLookup.Post", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2451,7 +2332,7 @@ "DisplayName": "Put", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2460,7 +2341,7 @@ "DisplayName": "Remove", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2469,43 +2350,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DeveloperKit.Components", - "ParentName": "App.DeveloperKit", - "DisplayName": "App.DeveloperKit.Components", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DeveloperKit.Components.Create", - "ParentName": "App.DeveloperKit.Components", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DeveloperKit.Components.Update", - "ParentName": "App.DeveloperKit.Components", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Saas", - "Name": "App.DeveloperKit.Components.Delete", - "ParentName": "App.DeveloperKit.Components", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2514,7 +2359,7 @@ "DisplayName": "App.DeveloperKit.DynamicServices", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2523,7 +2368,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2532,7 +2377,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2541,7 +2386,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2550,7 +2395,7 @@ "DisplayName": "Manage", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2559,7 +2404,7 @@ "DisplayName": "TestCompile", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2568,7 +2413,7 @@ "DisplayName": "Publish", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2577,7 +2422,133 @@ "DisplayName": "ViewCode", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DeveloperKit.Components", + "ParentName": "App.DeveloperKit", + "DisplayName": "App.DeveloperKit.Components", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DeveloperKit.Components.Create", + "ParentName": "App.DeveloperKit.Components", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DeveloperKit.Components.Update", + "ParentName": "App.DeveloperKit.Components", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.DeveloperKit.Components.Delete", + "ParentName": "App.DeveloperKit.Components", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.Listform", + "ParentName": "App.DeveloperKit", + "DisplayName": "App.Listforms.Listform", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.Listform.Create", + "ParentName": "App.Listforms.Listform", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.Listform.Delete", + "ParentName": "App.Listforms.Listform", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.Listform.Export", + "ParentName": "App.Listforms.Listform", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.Listform.Import", + "ParentName": "App.Listforms.Listform", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.Listform.Update", + "ParentName": "App.Listforms.Listform", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.ListformField", + "ParentName": "App.Listforms.Listform", + "DisplayName": "App.Listforms.ListformField", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.ListformField.Create", + "ParentName": "App.Listforms.ListformField", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.ListformField.Delete", + "ParentName": "App.Listforms.ListformField", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.Listforms.ListformField.Update", + "ParentName": "App.Listforms.ListformField", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2586,7 +2557,7 @@ "DisplayName": "App.Listforms.Wizard", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2595,7 +2566,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2604,7 +2575,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2613,7 +2584,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2622,7 +2593,7 @@ "DisplayName": "App.Platform.Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Saas", @@ -2631,241 +2602,88 @@ "DisplayName": "App.Platform.Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { - "GroupName": "App.Administration", - "Name": "App.Setting", + "GroupName": "App.Saas", + "Name": "App.Setup.Migrate", + "ParentName": "App.DeveloperKit", + "DisplayName": "App.Setup.Migrate", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Saas", + "Name": "App.ForumManagement", "ParentName": null, - "DisplayName": "App.Setting", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.SiteManagement", - "ParentName": "App.Setting", - "DisplayName": "App.SiteManagement", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Localization", - "ParentName": "App.SiteManagement", - "DisplayName": "Abp.Localization", + "DisplayName": "App.ForumManagement", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { - "GroupName": "App.Administration", - "Name": "App.SiteManagement.Theme", - "ParentName": "App.SiteManagement", - "DisplayName": "App.SiteManagement.Theme", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.SiteManagement.General", - "ParentName": "App.SiteManagement", - "DisplayName": "App.SiteManagement.General", + "GroupName": "App.Saas", + "Name": "App.ForumManagement.Create", + "ParentName": "App.ForumManagement", + "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { - "GroupName": "App.Administration", - "Name": "App.Sender", - "ParentName": "App.Setting", - "DisplayName": "App.Sender", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Sender.Sms", - "ParentName": "App.Sender", - "DisplayName": "App.Sender.Sms", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Sender.Sms.PostaGuvercini", - "ParentName": "App.Sender.Sms", - "DisplayName": "App.Sender.Sms.PostaGuvercini", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Sender.WhatsApp", - "ParentName": "App.Sender", - "DisplayName": "App.Sender.WhatsApp", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Sender.Telegram", - "ParentName": "App.Sender", - "DisplayName": "App.Sender.Telegram", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Sender.Rocket", - "ParentName": "App.Sender", - "DisplayName": "App.Sender.Rocket", + "GroupName": "App.Saas", + "Name": "App.ForumManagement.Delete", + "ParentName": "App.ForumManagement", + "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { - "GroupName": "App.Administration", - "Name": "Abp.Mailing", - "ParentName": "App.Setting", - "DisplayName": "Abp.Mailing", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Mailing.Default", - "ParentName": "Abp.Mailing", - "DisplayName": "Abp.Mailing.Default", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Mailing.Smtp", - "ParentName": "Abp.Mailing", - "DisplayName": "Abp.Mailing.Smtp", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Mailing.AWS", - "ParentName": "Abp.Mailing", - "DisplayName": "Abp.Mailing.AWS", + "GroupName": "App.Saas", + "Name": "App.ForumManagement.Export", + "ParentName": "App.ForumManagement", + "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { - "GroupName": "App.Administration", - "Name": "Abp.Account", - "ParentName": "App.Setting", - "DisplayName": "Abp.Account", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Account.General", - "ParentName": "Abp.Account", - "DisplayName": "Abp.Account.General", + "GroupName": "App.Saas", + "Name": "App.ForumManagement.Import", + "ParentName": "App.ForumManagement", + "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { - "GroupName": "App.Administration", - "Name": "Abp.Account.TwoFactor", - "ParentName": "Abp.Account", - "DisplayName": "Abp.Account.TwoFactor", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Account.Captcha", - "ParentName": "Abp.Account", - "DisplayName": "Abp.Account.Captcha", + "GroupName": "App.Saas", + "Name": "App.ForumManagement.Update", + "ParentName": "App.ForumManagement", + "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", - "Name": "Abp.Identity", - "ParentName": "App.Setting", - "DisplayName": "Abp.Identity", + "Name": "App.Administration.Definitions", + "ParentName": null, + "DisplayName": "App.Platform.Definitions", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.Profile", - "ParentName": "Abp.Identity", - "DisplayName": "Abp.Identity.Profile", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.Password", - "ParentName": "Abp.Identity", - "DisplayName": "Abp.Identity.Password", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.SignIn", - "ParentName": "Abp.Identity", - "DisplayName": "Abp.Identity.SignIn", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.Lockout", - "ParentName": "Abp.Identity", - "DisplayName": "Abp.Identity.Lockout", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.User", - "ParentName": "Abp.Identity", - "DisplayName": "Abp.Identity.User", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", "Name": "App.Definitions.Sector", - "ParentName": null, + "ParentName": "App.Administration.Definitions", "DisplayName": "App.Definitions.Sector", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2874,7 +2692,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2883,7 +2701,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2892,7 +2710,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2901,7 +2719,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2910,16 +2728,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", "Name": "App.Definitions.Department", - "ParentName": null, + "ParentName": "App.Administration.Definitions", "DisplayName": "App.Definitions.Department", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2928,7 +2746,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2937,7 +2755,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2946,7 +2764,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2955,7 +2773,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2964,16 +2782,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", "Name": "App.Definitions.JobPosition", - "ParentName": null, + "ParentName": "App.Administration.Definitions", "DisplayName": "App.Definitions.JobPosition", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2982,7 +2800,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -2991,7 +2809,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -3000,7 +2818,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -3009,7 +2827,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -3018,1699 +2836,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", "Name": "App.Definitions.OrgChart", - "ParentName": null, + "ParentName": "App.Administration.Definitions", "DisplayName": "App.Definitions.OrgChart", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.WorkHour", - "ParentName": null, - "DisplayName": "App.Restrictions.WorkHour", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.WorkHour.Create", - "ParentName": "App.Restrictions.WorkHour", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.WorkHour.Update", - "ParentName": "App.Restrictions.WorkHour", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.WorkHour.Delete", - "ParentName": "App.Restrictions.WorkHour", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.WorkHour.Export", - "ParentName": "App.Restrictions.WorkHour", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.WorkHour.Import", - "ParentName": "App.Restrictions.WorkHour", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.PermissionGroups", - "ParentName": null, - "DisplayName": "Abp.Identity.PermissionGroups", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.PermissionGroups.Create", - "ParentName": "Abp.Identity.PermissionGroups", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.PermissionGroups.Delete", - "ParentName": "Abp.Identity.PermissionGroups", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.PermissionGroups.Export", - "ParentName": "Abp.Identity.PermissionGroups", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.PermissionGroups.Import", - "ParentName": "Abp.Identity.PermissionGroups", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.PermissionGroups.Update", - "ParentName": "Abp.Identity.PermissionGroups", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.Permissions", - "ParentName": null, - "DisplayName": "Abp.Identity.Permissions", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.Permissions.Create", - "ParentName": "Abp.Identity.Permissions", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.Permissions.Delete", - "ParentName": "Abp.Identity.Permissions", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.Permissions.Export", - "ParentName": "Abp.Identity.Permissions", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.Permissions.Import", - "ParentName": "Abp.Identity.Permissions", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.Permissions.Update", - "ParentName": "Abp.Identity.Permissions", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 2, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.ClaimType", - "ParentName": null, - "DisplayName": "App.IdentityManagement.ClaimType", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.ClaimType.Create", - "ParentName": "App.IdentityManagement.ClaimType", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.ClaimType.Delete", - "ParentName": "App.IdentityManagement.ClaimType", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.ClaimType.Export", - "ParentName": "App.IdentityManagement.ClaimType", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.ClaimType.Import", - "ParentName": "App.IdentityManagement.ClaimType", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.ClaimType.Update", - "ParentName": "App.IdentityManagement.ClaimType", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Roles", - "ParentName": null, - "DisplayName": "AbpIdentity.Roles", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Roles.Create", - "ParentName": "AbpIdentity.Roles", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Roles.Delete", - "ParentName": "AbpIdentity.Roles", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Roles.Export", - "ParentName": "AbpIdentity.Roles", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Roles.Import", - "ParentName": "AbpIdentity.Roles", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Roles.ManagePermissions", - "ParentName": "AbpIdentity.Roles", - "DisplayName": "AbpIdentity.Roles.ManagePermissions", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Roles.Update", - "ParentName": "AbpIdentity.Roles", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.UserLookup", - "ParentName": null, - "DisplayName": "AbpIdentity.UserLookup", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Users", - "ParentName": null, - "DisplayName": "AbpIdentity.Users", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Users.Create", - "ParentName": "AbpIdentity.Users", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Users.Delete", - "ParentName": "AbpIdentity.Users", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Users.Export", - "ParentName": "AbpIdentity.Users", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Users.Import", - "ParentName": "AbpIdentity.Users", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Users.ManagePermissions", - "ParentName": "AbpIdentity.Users", - "DisplayName": "AbpIdentity.Users.ManagePermissions", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Users.Update", - "ParentName": "AbpIdentity.Users", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Users.Widget", - "ParentName": "AbpIdentity.Users", - "DisplayName": "App.Platform.Widget", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "AbpIdentity.Users.Update.ManageRoles", - "ParentName": "AbpIdentity.Users.Update", - "DisplayName": "AbpIdentity.Users.Update.ManageRoles", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "Abp.Identity.OrganizationUnits", - "ParentName": null, - "DisplayName": "Abp.Identity.OrganizationUnits", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.IpRestrictions", - "ParentName": null, - "DisplayName": "App.Restrictions.IpRestrictions", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.IpRestrictions.Create", - "ParentName": "App.Restrictions.IpRestrictions", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.IpRestrictions.Delete", - "ParentName": "App.Restrictions.IpRestrictions", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.IpRestrictions.Export", - "ParentName": "App.Restrictions.IpRestrictions", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.IpRestrictions.Import", - "ParentName": "App.Restrictions.IpRestrictions", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Restrictions.IpRestrictions.Update", - "ParentName": "App.Restrictions.IpRestrictions", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.AuditLogs", - "ParentName": null, - "DisplayName": "App.IdentityManagement.AuditLogs", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.AuditLogs.Create", - "ParentName": "App.IdentityManagement.AuditLogs", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.AuditLogs.Delete", - "ParentName": "App.IdentityManagement.AuditLogs", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.AuditLogs.Export", - "ParentName": "App.IdentityManagement.AuditLogs", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.AuditLogs.Import", - "ParentName": "App.IdentityManagement.AuditLogs", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.AuditLogs.Update", - "ParentName": "App.IdentityManagement.AuditLogs", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.Sessions", - "ParentName": null, - "DisplayName": "App.IdentityManagement.Sessions", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.Sessions.Create", - "ParentName": "App.IdentityManagement.Sessions", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.Sessions.Delete", - "ParentName": "App.IdentityManagement.Sessions", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.Sessions.Export", - "ParentName": "App.IdentityManagement.Sessions", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.IdentityManagement.Sessions.Update", - "ParentName": "App.IdentityManagement.Sessions", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.Categories", - "ParentName": null, - "DisplayName": "App.Reports.Categories", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.Categories.Create", - "ParentName": "App.Reports.Categories", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.Categories.Delete", - "ParentName": "App.Reports.Categories", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.Categories.Export", - "ParentName": "App.Reports.Categories", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.Categories.Import", - "ParentName": "App.Reports.Categories", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.Categories.Update", - "ParentName": "App.Reports.Categories", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.ReportTemplates", - "ParentName": null, - "DisplayName": "App.Reports.ReportTemplates", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.ReportTemplates.Create", - "ParentName": "App.Reports.ReportTemplates", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.ReportTemplates.Delete", - "ParentName": "App.Reports.ReportTemplates", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.ReportTemplates.Export", - "ParentName": "App.Reports.ReportTemplates", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.ReportTemplates.Import", - "ParentName": "App.Reports.ReportTemplates", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Reports.ReportTemplates.Update", - "ParentName": "App.Reports.ReportTemplates", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Files", - "ParentName": null, - "DisplayName": "App.Files", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Files.Create", - "ParentName": "App.Files", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Files.Update", - "ParentName": "App.Files", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Files.Delete", - "ParentName": "App.Files", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Files.Widget", - "ParentName": "App.Files", - "DisplayName": "App.Platform.Widget", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.ForumManagement.Publish", - "ParentName": null, - "DisplayName": "App.ForumManagement.Publish", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet", - "ParentName": null, - "DisplayName": "App.Intranet", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventType", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.Events.EventType", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventType.Create", - "ParentName": "App.Intranet.Events.EventType", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventType.Update", - "ParentName": "App.Intranet.Events.EventType", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventType.Delete", - "ParentName": "App.Intranet.Events.EventType", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventType.Export", - "ParentName": "App.Intranet.Events.EventType", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventType.Import", - "ParentName": "App.Intranet.Events.EventType", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventCategory", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.Events.EventCategory", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventCategory.Create", - "ParentName": "App.Intranet.Events.EventCategory", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventCategory.Update", - "ParentName": "App.Intranet.Events.EventCategory", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventCategory.Delete", - "ParentName": "App.Intranet.Events.EventCategory", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventCategory.Export", - "ParentName": "App.Intranet.Events.EventCategory", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventCategory.Import", - "ParentName": "App.Intranet.Events.EventCategory", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.Event", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.Events.Event", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.Event.Create", - "ParentName": "App.Intranet.Events.Event", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.Event.Update", - "ParentName": "App.Intranet.Events.Event", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.Event.Delete", - "ParentName": "App.Intranet.Events.Event", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.Event.Export", - "ParentName": "App.Intranet.Events.Event", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.Event.Import", - "ParentName": "App.Intranet.Events.Event", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.Event.Note", - "ParentName": "App.Intranet.Events.Event", - "DisplayName": "Note", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.Event.Widget", - "ParentName": "App.Intranet.Events.Event", - "DisplayName": "App.Platform.Widget", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventLike", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.Events.EventLike", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventLike.Create", - "ParentName": "App.Intranet.Events.EventLike", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventLike.Update", - "ParentName": "App.Intranet.Events.EventLike", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventLike.Delete", - "ParentName": "App.Intranet.Events.EventLike", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventLike.Export", - "ParentName": "App.Intranet.Events.EventLike", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventLike.Import", - "ParentName": "App.Intranet.Events.EventLike", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventComment", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.Events.EventComment", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventComment.Create", - "ParentName": "App.Intranet.Events.EventComment", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventComment.Update", - "ParentName": "App.Intranet.Events.EventComment", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventComment.Delete", - "ParentName": "App.Intranet.Events.EventComment", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventComment.Export", - "ParentName": "App.Intranet.Events.EventComment", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Events.EventComment.Import", - "ParentName": "App.Intranet.Events.EventComment", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.Announcement", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.Create", - "ParentName": "App.Intranet.Announcement", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.Update", - "ParentName": "App.Intranet.Announcement", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.Delete", - "ParentName": "App.Intranet.Announcement", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.Export", - "ParentName": "App.Intranet.Announcement", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.Import", - "ParentName": "App.Intranet.Announcement", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.Widget", - "ParentName": "App.Intranet.Announcement", - "DisplayName": "App.Platform.Widget", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.Note", - "ParentName": "App.Intranet.Announcement", - "DisplayName": "Note", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementLike", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.Announcement.AnnouncementLike", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementLike.Create", - "ParentName": "App.Intranet.Announcement.AnnouncementLike", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementLike.Update", - "ParentName": "App.Intranet.Announcement.AnnouncementLike", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementLike.Delete", - "ParentName": "App.Intranet.Announcement.AnnouncementLike", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementLike.Export", - "ParentName": "App.Intranet.Announcement.AnnouncementLike", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementLike.Import", - "ParentName": "App.Intranet.Announcement.AnnouncementLike", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementComment", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.Announcement.AnnouncementComment", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementComment.Create", - "ParentName": "App.Intranet.Announcement.AnnouncementComment", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementComment.Update", - "ParentName": "App.Intranet.Announcement.AnnouncementComment", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementComment.Delete", - "ParentName": "App.Intranet.Announcement.AnnouncementComment", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementComment.Export", - "ParentName": "App.Intranet.Announcement.AnnouncementComment", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Announcement.AnnouncementComment.Import", - "ParentName": "App.Intranet.Announcement.AnnouncementComment", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialPost", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.SocialPost", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialPost.Create", - "ParentName": "App.Intranet.SocialPost", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialPost.Update", - "ParentName": "App.Intranet.SocialPost", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialPost.Delete", - "ParentName": "App.Intranet.SocialPost", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialPost.Export", - "ParentName": "App.Intranet.SocialPost", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialPost.Import", - "ParentName": "App.Intranet.SocialPost", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialPost.Note", - "ParentName": "App.Intranet.SocialPost", - "DisplayName": "Note", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialPost.Widget", - "ParentName": "App.Intranet.SocialPost", - "DisplayName": "App.Platform.Widget", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialComment", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.SocialComment", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialComment.Create", - "ParentName": "App.Intranet.SocialComment", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialComment.Update", - "ParentName": "App.Intranet.SocialComment", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialComment.Delete", - "ParentName": "App.Intranet.SocialComment", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialComment.Export", - "ParentName": "App.Intranet.SocialComment", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialComment.Import", - "ParentName": "App.Intranet.SocialComment", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialLike", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.SocialLike", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialLike.Create", - "ParentName": "App.Intranet.SocialLike", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialLike.Update", - "ParentName": "App.Intranet.SocialLike", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialLike.Delete", - "ParentName": "App.Intranet.SocialLike", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialLike.Export", - "ParentName": "App.Intranet.SocialLike", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SocialLike.Import", - "ParentName": "App.Intranet.SocialLike", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Survey", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.Survey", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Survey.Create", - "ParentName": "App.Intranet.Survey", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Survey.Update", - "ParentName": "App.Intranet.Survey", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Survey.Delete", - "ParentName": "App.Intranet.Survey", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Survey.Export", - "ParentName": "App.Intranet.Survey", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Survey.Import", - "ParentName": "App.Intranet.Survey", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Survey.Note", - "ParentName": "App.Intranet.Survey", - "DisplayName": "Note", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.Survey.Widget", - "ParentName": "App.Intranet.Survey", - "DisplayName": "App.Platform.Widget", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestion", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.SurveyQuestion", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestion.Create", - "ParentName": "App.Intranet.SurveyQuestion", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestion.Update", - "ParentName": "App.Intranet.SurveyQuestion", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestion.Delete", - "ParentName": "App.Intranet.SurveyQuestion", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestion.Export", - "ParentName": "App.Intranet.SurveyQuestion", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestion.Import", - "ParentName": "App.Intranet.SurveyQuestion", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestion.Note", - "ParentName": "App.Intranet.SurveyQuestion", - "DisplayName": "Note", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestionOption", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.SurveyQuestionOption", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestionOption.Create", - "ParentName": "App.Intranet.SurveyQuestionOption", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestionOption.Update", - "ParentName": "App.Intranet.SurveyQuestionOption", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestionOption.Delete", - "ParentName": "App.Intranet.SurveyQuestionOption", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestionOption.Export", - "ParentName": "App.Intranet.SurveyQuestionOption", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyQuestionOption.Import", - "ParentName": "App.Intranet.SurveyQuestionOption", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyResponse", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.SurveyResponse", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyResponse.Create", - "ParentName": "App.Intranet.SurveyResponse", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyResponse.Update", - "ParentName": "App.Intranet.SurveyResponse", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyResponse.Delete", - "ParentName": "App.Intranet.SurveyResponse", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyResponse.Export", - "ParentName": "App.Intranet.SurveyResponse", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyResponse.Import", - "ParentName": "App.Intranet.SurveyResponse", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyResponse.Note", - "ParentName": "App.Intranet.SurveyResponse", - "DisplayName": "Note", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyAnswer", - "ParentName": "App.Intranet", - "DisplayName": "App.Intranet.SurveyAnswer", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyAnswer.Create", - "ParentName": "App.Intranet.SurveyAnswer", - "DisplayName": "App.Platform.Create", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyAnswer.Update", - "ParentName": "App.Intranet.SurveyAnswer", - "DisplayName": "App.Platform.Update", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyAnswer.Delete", - "ParentName": "App.Intranet.SurveyAnswer", - "DisplayName": "App.Platform.Delete", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyAnswer.Export", - "ParentName": "App.Intranet.SurveyAnswer", - "DisplayName": "Export", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Intranet.SurveyAnswer.Import", - "ParentName": "App.Intranet.SurveyAnswer", - "DisplayName": "Import", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Videoroom", - "ParentName": null, - "DisplayName": "App.Videoroom", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Videoroom.List", - "ParentName": "App.Videoroom", - "DisplayName": "App.Videoroom.List", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" - }, - { - "GroupName": "App.Administration", - "Name": "App.Videoroom.Detail", - "ParentName": "App.Videoroom", - "DisplayName": "App.Videoroom.Detail", - "IsEnabled": true, - "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4719,7 +2854,7 @@ "DisplayName": "App.Licence", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4728,7 +2863,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4737,7 +2872,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4746,7 +2881,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4755,7 +2890,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4764,16 +2899,16 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", "Name": "App.LicenceItem", - "ParentName": null, + "ParentName": "App.Licence", "DisplayName": "App.LicenceItem", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4782,7 +2917,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4791,7 +2926,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4800,7 +2935,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4809,7 +2944,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4818,7 +2953,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4827,7 +2962,7 @@ "DisplayName": "App.DevRequest", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4836,7 +2971,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4845,7 +2980,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4854,7 +2989,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4863,7 +2998,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4872,7 +3007,7 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4881,7 +3016,7 @@ "DisplayName": "App.Agenda", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4890,7 +3025,7 @@ "DisplayName": "App.Platform.Create", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4899,7 +3034,7 @@ "DisplayName": "App.Platform.Update", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4908,7 +3043,7 @@ "DisplayName": "App.Platform.Delete", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4917,7 +3052,7 @@ "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" }, { "GroupName": "App.Administration", @@ -4926,7 +3061,1933 @@ "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, - "MenuGroup": "Erp|Kurs" + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Setting", + "ParentName": null, + "DisplayName": "App.Setting", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.SiteManagement", + "ParentName": "App.Setting", + "DisplayName": "App.SiteManagement", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Localization", + "ParentName": "App.SiteManagement", + "DisplayName": "Abp.Localization", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.SiteManagement.Theme", + "ParentName": "App.SiteManagement", + "DisplayName": "App.SiteManagement.Theme", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.SiteManagement.General", + "ParentName": "App.SiteManagement", + "DisplayName": "App.SiteManagement.General", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Sender", + "ParentName": "App.Setting", + "DisplayName": "App.Sender", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Sender.Sms", + "ParentName": "App.Sender", + "DisplayName": "App.Sender.Sms", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Sender.Sms.PostaGuvercini", + "ParentName": "App.Sender.Sms", + "DisplayName": "App.Sender.Sms.PostaGuvercini", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Sender.WhatsApp", + "ParentName": "App.Sender", + "DisplayName": "App.Sender.WhatsApp", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Sender.Telegram", + "ParentName": "App.Sender", + "DisplayName": "App.Sender.Telegram", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Sender.Rocket", + "ParentName": "App.Sender", + "DisplayName": "App.Sender.Rocket", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Mailing", + "ParentName": "App.Setting", + "DisplayName": "Abp.Mailing", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Mailing.Default", + "ParentName": "Abp.Mailing", + "DisplayName": "Abp.Mailing.Default", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Mailing.Smtp", + "ParentName": "Abp.Mailing", + "DisplayName": "Abp.Mailing.Smtp", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Mailing.AWS", + "ParentName": "Abp.Mailing", + "DisplayName": "Abp.Mailing.AWS", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Account", + "ParentName": "App.Setting", + "DisplayName": "Abp.Account", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Account.General", + "ParentName": "Abp.Account", + "DisplayName": "Abp.Account.General", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Account.TwoFactor", + "ParentName": "Abp.Account", + "DisplayName": "Abp.Account.TwoFactor", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Account.Captcha", + "ParentName": "Abp.Account", + "DisplayName": "Abp.Account.Captcha", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity", + "ParentName": "App.Setting", + "DisplayName": "Abp.Identity", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.Profile", + "ParentName": "Abp.Identity", + "DisplayName": "Abp.Identity.Profile", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.Password", + "ParentName": "Abp.Identity", + "DisplayName": "Abp.Identity.Password", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.SignIn", + "ParentName": "Abp.Identity", + "DisplayName": "Abp.Identity.SignIn", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.Lockout", + "ParentName": "Abp.Identity", + "DisplayName": "Abp.Identity.Lockout", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.User", + "ParentName": "Abp.Identity", + "DisplayName": "Abp.Identity.User", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet", + "ParentName": null, + "DisplayName": "App.Intranet", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement", + "ParentName": "App.Intranet", + "DisplayName": "App.Intranet.Announcement", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.Create", + "ParentName": "App.Intranet.Announcement", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.Update", + "ParentName": "App.Intranet.Announcement", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.Delete", + "ParentName": "App.Intranet.Announcement", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.Export", + "ParentName": "App.Intranet.Announcement", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.Import", + "ParentName": "App.Intranet.Announcement", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.Widget", + "ParentName": "App.Intranet.Announcement", + "DisplayName": "App.Platform.Widget", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.Note", + "ParentName": "App.Intranet.Announcement", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementLike", + "ParentName": "App.Intranet.Announcement", + "DisplayName": "App.Intranet.Announcement.AnnouncementLike", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementLike.Create", + "ParentName": "App.Intranet.Announcement.AnnouncementLike", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementLike.Update", + "ParentName": "App.Intranet.Announcement.AnnouncementLike", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementLike.Delete", + "ParentName": "App.Intranet.Announcement.AnnouncementLike", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementLike.Export", + "ParentName": "App.Intranet.Announcement.AnnouncementLike", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementLike.Import", + "ParentName": "App.Intranet.Announcement.AnnouncementLike", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementComment", + "ParentName": "App.Intranet.Announcement", + "DisplayName": "App.Intranet.Announcement.AnnouncementComment", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementComment.Create", + "ParentName": "App.Intranet.Announcement.AnnouncementComment", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementComment.Update", + "ParentName": "App.Intranet.Announcement.AnnouncementComment", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementComment.Delete", + "ParentName": "App.Intranet.Announcement.AnnouncementComment", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementComment.Export", + "ParentName": "App.Intranet.Announcement.AnnouncementComment", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Announcement.AnnouncementComment.Import", + "ParentName": "App.Intranet.Announcement.AnnouncementComment", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Survey", + "ParentName": "App.Intranet", + "DisplayName": "App.Intranet.Survey", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Survey.Create", + "ParentName": "App.Intranet.Survey", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Survey.Update", + "ParentName": "App.Intranet.Survey", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Survey.Delete", + "ParentName": "App.Intranet.Survey", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Survey.Export", + "ParentName": "App.Intranet.Survey", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Survey.Import", + "ParentName": "App.Intranet.Survey", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Survey.Note", + "ParentName": "App.Intranet.Survey", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Survey.Widget", + "ParentName": "App.Intranet.Survey", + "DisplayName": "App.Platform.Widget", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestion", + "ParentName": "App.Intranet.Survey", + "DisplayName": "App.Intranet.SurveyQuestion", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestion.Create", + "ParentName": "App.Intranet.SurveyQuestion", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestion.Update", + "ParentName": "App.Intranet.SurveyQuestion", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestion.Delete", + "ParentName": "App.Intranet.SurveyQuestion", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestion.Export", + "ParentName": "App.Intranet.SurveyQuestion", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestion.Import", + "ParentName": "App.Intranet.SurveyQuestion", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestion.Note", + "ParentName": "App.Intranet.SurveyQuestion", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestionOption", + "ParentName": "App.Intranet.Survey", + "DisplayName": "App.Intranet.SurveyQuestionOption", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestionOption.Create", + "ParentName": "App.Intranet.SurveyQuestionOption", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestionOption.Update", + "ParentName": "App.Intranet.SurveyQuestionOption", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestionOption.Delete", + "ParentName": "App.Intranet.SurveyQuestionOption", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestionOption.Export", + "ParentName": "App.Intranet.SurveyQuestionOption", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyQuestionOption.Import", + "ParentName": "App.Intranet.SurveyQuestionOption", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyResponse", + "ParentName": "App.Intranet.Survey", + "DisplayName": "App.Intranet.SurveyResponse", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyResponse.Create", + "ParentName": "App.Intranet.SurveyResponse", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyResponse.Update", + "ParentName": "App.Intranet.SurveyResponse", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyResponse.Delete", + "ParentName": "App.Intranet.SurveyResponse", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyResponse.Export", + "ParentName": "App.Intranet.SurveyResponse", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyResponse.Import", + "ParentName": "App.Intranet.SurveyResponse", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyResponse.Note", + "ParentName": "App.Intranet.SurveyResponse", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyAnswer", + "ParentName": "App.Intranet.Survey", + "DisplayName": "App.Intranet.SurveyAnswer", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyAnswer.Create", + "ParentName": "App.Intranet.SurveyAnswer", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyAnswer.Update", + "ParentName": "App.Intranet.SurveyAnswer", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyAnswer.Delete", + "ParentName": "App.Intranet.SurveyAnswer", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyAnswer.Export", + "ParentName": "App.Intranet.SurveyAnswer", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SurveyAnswer.Import", + "ParentName": "App.Intranet.SurveyAnswer", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialPost", + "ParentName": "App.Intranet", + "DisplayName": "App.Intranet.SocialPost", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialPost.Create", + "ParentName": "App.Intranet.SocialPost", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialPost.Update", + "ParentName": "App.Intranet.SocialPost", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialPost.Delete", + "ParentName": "App.Intranet.SocialPost", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialPost.Export", + "ParentName": "App.Intranet.SocialPost", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialPost.Import", + "ParentName": "App.Intranet.SocialPost", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialPost.Note", + "ParentName": "App.Intranet.SocialPost", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialPost.Widget", + "ParentName": "App.Intranet.SocialPost", + "DisplayName": "App.Platform.Widget", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialComment", + "ParentName": "App.Intranet.SocialPost", + "DisplayName": "App.Intranet.SocialComment", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialComment.Create", + "ParentName": "App.Intranet.SocialComment", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialComment.Update", + "ParentName": "App.Intranet.SocialComment", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialComment.Delete", + "ParentName": "App.Intranet.SocialComment", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialComment.Export", + "ParentName": "App.Intranet.SocialComment", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialComment.Import", + "ParentName": "App.Intranet.SocialComment", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialLike", + "ParentName": "App.Intranet.SocialPost", + "DisplayName": "App.Intranet.SocialLike", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialLike.Create", + "ParentName": "App.Intranet.SocialLike", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialLike.Update", + "ParentName": "App.Intranet.SocialLike", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialLike.Delete", + "ParentName": "App.Intranet.SocialLike", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialLike.Export", + "ParentName": "App.Intranet.SocialLike", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.SocialLike.Import", + "ParentName": "App.Intranet.SocialLike", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventType", + "ParentName": "App.Intranet", + "DisplayName": "App.Intranet.Events.EventType", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventType.Create", + "ParentName": "App.Intranet.Events.EventType", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventType.Update", + "ParentName": "App.Intranet.Events.EventType", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventType.Delete", + "ParentName": "App.Intranet.Events.EventType", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventType.Export", + "ParentName": "App.Intranet.Events.EventType", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventType.Import", + "ParentName": "App.Intranet.Events.EventType", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventCategory", + "ParentName": "App.Intranet", + "DisplayName": "App.Intranet.Events.EventCategory", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventCategory.Create", + "ParentName": "App.Intranet.Events.EventCategory", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventCategory.Update", + "ParentName": "App.Intranet.Events.EventCategory", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventCategory.Delete", + "ParentName": "App.Intranet.Events.EventCategory", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventCategory.Export", + "ParentName": "App.Intranet.Events.EventCategory", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventCategory.Import", + "ParentName": "App.Intranet.Events.EventCategory", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.Event", + "ParentName": "App.Intranet", + "DisplayName": "App.Intranet.Events.Event", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.Event.Create", + "ParentName": "App.Intranet.Events.Event", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.Event.Update", + "ParentName": "App.Intranet.Events.Event", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.Event.Delete", + "ParentName": "App.Intranet.Events.Event", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.Event.Export", + "ParentName": "App.Intranet.Events.Event", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.Event.Import", + "ParentName": "App.Intranet.Events.Event", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.Event.Note", + "ParentName": "App.Intranet.Events.Event", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.Event.Widget", + "ParentName": "App.Intranet.Events.Event", + "DisplayName": "App.Platform.Widget", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventLike", + "ParentName": "App.Intranet.Events.Event", + "DisplayName": "App.Intranet.Events.EventLike", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventLike.Create", + "ParentName": "App.Intranet.Events.EventLike", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventLike.Update", + "ParentName": "App.Intranet.Events.EventLike", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventLike.Delete", + "ParentName": "App.Intranet.Events.EventLike", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventLike.Export", + "ParentName": "App.Intranet.Events.EventLike", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventLike.Import", + "ParentName": "App.Intranet.Events.EventLike", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventComment", + "ParentName": "App.Intranet.Events.Event", + "DisplayName": "App.Intranet.Events.EventComment", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventComment.Create", + "ParentName": "App.Intranet.Events.EventComment", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventComment.Update", + "ParentName": "App.Intranet.Events.EventComment", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventComment.Delete", + "ParentName": "App.Intranet.Events.EventComment", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventComment.Export", + "ParentName": "App.Intranet.Events.EventComment", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Intranet.Events.EventComment.Import", + "ParentName": "App.Intranet.Events.EventComment", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Platform.Restrictions", + "ParentName": null, + "DisplayName": "App.Platform.Restrictions", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.WorkHour", + "ParentName": "App.Platform.Restrictions", + "DisplayName": "App.Restrictions.WorkHour", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.WorkHour.Create", + "ParentName": "App.Restrictions.WorkHour", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.WorkHour.Update", + "ParentName": "App.Restrictions.WorkHour", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.WorkHour.Delete", + "ParentName": "App.Restrictions.WorkHour", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.WorkHour.Export", + "ParentName": "App.Restrictions.WorkHour", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.WorkHour.Import", + "ParentName": "App.Restrictions.WorkHour", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.IpRestrictions", + "ParentName": "App.Platform.Restrictions", + "DisplayName": "App.Restrictions.IpRestrictions", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.IpRestrictions.Create", + "ParentName": "App.Restrictions.IpRestrictions", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.IpRestrictions.Delete", + "ParentName": "App.Restrictions.IpRestrictions", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.IpRestrictions.Export", + "ParentName": "App.Restrictions.IpRestrictions", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.IpRestrictions.Import", + "ParentName": "App.Restrictions.IpRestrictions", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Restrictions.IpRestrictions.Update", + "ParentName": "App.Restrictions.IpRestrictions", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity", + "ParentName": null, + "DisplayName": "Abp.Identity", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.PermissionGroups", + "ParentName": "Abp.Identity", + "DisplayName": "Abp.Identity.PermissionGroups", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.PermissionGroups.Create", + "ParentName": "Abp.Identity.PermissionGroups", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.PermissionGroups.Delete", + "ParentName": "Abp.Identity.PermissionGroups", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.PermissionGroups.Export", + "ParentName": "Abp.Identity.PermissionGroups", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.PermissionGroups.Import", + "ParentName": "Abp.Identity.PermissionGroups", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.PermissionGroups.Update", + "ParentName": "Abp.Identity.PermissionGroups", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.Permissions", + "ParentName": "Abp.Identity", + "DisplayName": "Abp.Identity.Permissions", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.Permissions.Create", + "ParentName": "Abp.Identity.Permissions", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.Permissions.Delete", + "ParentName": "Abp.Identity.Permissions", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.Permissions.Export", + "ParentName": "Abp.Identity.Permissions", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.Permissions.Import", + "ParentName": "Abp.Identity.Permissions", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.Permissions.Update", + "ParentName": "Abp.Identity.Permissions", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 2, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.ClaimType", + "ParentName": "Abp.Identity", + "DisplayName": "App.IdentityManagement.ClaimType", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.ClaimType.Create", + "ParentName": "App.IdentityManagement.ClaimType", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.ClaimType.Delete", + "ParentName": "App.IdentityManagement.ClaimType", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.ClaimType.Export", + "ParentName": "App.IdentityManagement.ClaimType", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.ClaimType.Import", + "ParentName": "App.IdentityManagement.ClaimType", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.ClaimType.Update", + "ParentName": "App.IdentityManagement.ClaimType", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Roles", + "ParentName": "Abp.Identity", + "DisplayName": "AbpIdentity.Roles", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Roles.Create", + "ParentName": "AbpIdentity.Roles", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Roles.Delete", + "ParentName": "AbpIdentity.Roles", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Roles.Export", + "ParentName": "AbpIdentity.Roles", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Roles.Import", + "ParentName": "AbpIdentity.Roles", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Roles.ManagePermissions", + "ParentName": "AbpIdentity.Roles", + "DisplayName": "AbpIdentity.Roles.ManagePermissions", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Roles.Update", + "ParentName": "AbpIdentity.Roles", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Users", + "ParentName": "Abp.Identity", + "DisplayName": "AbpIdentity.Users", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Users.Create", + "ParentName": "AbpIdentity.Users", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Users.Delete", + "ParentName": "AbpIdentity.Users", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Users.Export", + "ParentName": "AbpIdentity.Users", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Users.Import", + "ParentName": "AbpIdentity.Users", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Users.ManagePermissions", + "ParentName": "AbpIdentity.Users", + "DisplayName": "AbpIdentity.Users.ManagePermissions", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Users.Update", + "ParentName": "AbpIdentity.Users", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.UserLookup", + "ParentName": "AbpIdentity.Users", + "DisplayName": "AbpIdentity.UserLookup", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Users.Widget", + "ParentName": "AbpIdentity.Users", + "DisplayName": "App.Platform.Widget", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "AbpIdentity.Users.Update.ManageRoles", + "ParentName": "AbpIdentity.Users.Update", + "DisplayName": "AbpIdentity.Users.Update.ManageRoles", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "Abp.Identity.OrganizationUnits", + "ParentName": "Abp.Identity", + "DisplayName": "Abp.Identity.OrganizationUnits", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.AuditLogs", + "ParentName": "Abp.Identity", + "DisplayName": "App.IdentityManagement.AuditLogs", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.AuditLogs.Create", + "ParentName": "App.IdentityManagement.AuditLogs", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.AuditLogs.Delete", + "ParentName": "App.IdentityManagement.AuditLogs", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.AuditLogs.Export", + "ParentName": "App.IdentityManagement.AuditLogs", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.AuditLogs.Import", + "ParentName": "App.IdentityManagement.AuditLogs", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.AuditLogs.Update", + "ParentName": "App.IdentityManagement.AuditLogs", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.Sessions", + "ParentName": "Abp.Identity", + "DisplayName": "App.IdentityManagement.Sessions", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.Sessions.Create", + "ParentName": "App.IdentityManagement.Sessions", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.Sessions.Delete", + "ParentName": "App.IdentityManagement.Sessions", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.Sessions.Export", + "ParentName": "App.IdentityManagement.Sessions", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.IdentityManagement.Sessions.Update", + "ParentName": "App.IdentityManagement.Sessions", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.Categories", + "ParentName": "App.Reports.Management", + "DisplayName": "App.Reports.Categories", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.Categories.Create", + "ParentName": "App.Reports.Categories", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.Categories.Delete", + "ParentName": "App.Reports.Categories", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.Categories.Export", + "ParentName": "App.Reports.Categories", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.Categories.Import", + "ParentName": "App.Reports.Categories", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.Categories.Update", + "ParentName": "App.Reports.Categories", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.ReportTemplates", + "ParentName": "App.Reports.Management", + "DisplayName": "App.Reports.ReportTemplates", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.ReportTemplates.Create", + "ParentName": "App.Reports.ReportTemplates", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.ReportTemplates.Delete", + "ParentName": "App.Reports.ReportTemplates", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.ReportTemplates.Export", + "ParentName": "App.Reports.ReportTemplates", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.ReportTemplates.Import", + "ParentName": "App.Reports.ReportTemplates", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Reports.ReportTemplates.Update", + "ParentName": "App.Reports.ReportTemplates", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Videoroom", + "ParentName": null, + "DisplayName": "App.Videoroom", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Videoroom.List", + "ParentName": "App.Videoroom", + "DisplayName": "App.Videoroom.List", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Videoroom.Detail", + "ParentName": "App.Videoroom", + "DisplayName": "App.Videoroom.Detail", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Files", + "ParentName": null, + "DisplayName": "App.Files", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Files.Create", + "ParentName": "App.Files", + "DisplayName": "App.Platform.Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Files.Update", + "ParentName": "App.Files", + "DisplayName": "App.Platform.Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Files.Delete", + "ParentName": "App.Files", + "DisplayName": "App.Platform.Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.Files.Widget", + "ParentName": "App.Files", + "DisplayName": "App.Platform.Widget", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" + }, + { + "GroupName": "App.Administration", + "Name": "App.ForumManagement.Publish", + "ParentName": null, + "DisplayName": "App.ForumManagement.Publish", + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Sas|Adm" } ] -} \ No newline at end of file +} diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/PlatformIdentityDataSeeder.cs b/api/src/Sozsoft.Platform.DbMigrator/Migrations/PlatformIdentityDataSeeder.cs index 55d0851e..5b199aaf 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/PlatformIdentityDataSeeder.cs +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/PlatformIdentityDataSeeder.cs @@ -187,6 +187,7 @@ public class PlatformIdentityDataSeeder : IdentityDataSeeder new(Guid.NewGuid(), IdentityPermissions.Roles.Delete, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Roles.Update, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Roles.Default + ".Export", "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), + new(Guid.NewGuid(), IdentityPermissions.Roles.Default + ".Import", "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Roles.ManagePermissions, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.Default, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.Create, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), @@ -194,6 +195,7 @@ public class PlatformIdentityDataSeeder : IdentityDataSeeder new(Guid.NewGuid(), IdentityPermissions.Users.Update, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.ManagePermissions, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.Default + ".Export", "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), + new(Guid.NewGuid(), IdentityPermissions.Users.Default + ".Import", "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.ManageRoles, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.UserLookup.Default, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), ]); diff --git a/api/src/Sozsoft.Platform.DbMigrator/Migrations/WizardDataSeeder.cs b/api/src/Sozsoft.Platform.DbMigrator/Migrations/WizardDataSeeder.cs index c24610a3..bea42bea 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Migrations/WizardDataSeeder.cs +++ b/api/src/Sozsoft.Platform.DbMigrator/Migrations/WizardDataSeeder.cs @@ -34,6 +34,7 @@ public class WizardDataSeeder : IDataSeedContributor, ITransientDependency private readonly IRepository _repoPermGroup; private readonly IRepository _repoPerm; private readonly IRepository _repoMenu; + private readonly IRepository _repoModule; private readonly IRepository _repoDataSource; private readonly IRepository _repoListForm; private readonly IRepository _repoListFormField; @@ -50,6 +51,7 @@ public class WizardDataSeeder : IDataSeedContributor, ITransientDependency IRepository repoPermGroup, IRepository repoPerm, IRepository repoMenu, + IRepository repoModule, IRepository repoDataSource, IRepository repoListForm, IRepository repoListFormField, @@ -62,6 +64,7 @@ public class WizardDataSeeder : IDataSeedContributor, ITransientDependency _repoPermGroup = repoPermGroup; _repoPerm = repoPerm; _repoMenu = repoMenu; + _repoModule = repoModule; _repoDataSource = repoDataSource; _repoListForm = repoListForm; _repoListFormField = repoListFormField; @@ -113,7 +116,7 @@ public class WizardDataSeeder : IDataSeedContributor, ITransientDependency var fileName = Path.GetFileName(filePath); - await BackfillMenuParentShortNameAsync(seedFile.Wizard); + await BackfillMenuParentModuleIdAsync(seedFile.Wizard); // Zaten seeded mi kontrol et. Custom yolunda ListForm üretilmediği için // idempotency menü kaydı üzerinden değerlendirilir. @@ -269,6 +272,8 @@ public class WizardDataSeeder : IDataSeedContributor, ITransientDependency if (input.CreateMenu) { // Menu Parent + await EnsureModuleAsync(input.MenuParentModuleId); + var menuQueryable = await _repoMenu.GetQueryableAsync(); var menuParent = await _repoMenu.FirstOrDefaultAsync(a => a.Code == input.MenuParentCode); if (menuParent == null) @@ -285,7 +290,7 @@ public class WizardDataSeeder : IDataSeedContributor, ITransientDependency Code = input.MenuParentCode, DisplayName = input.MenuParentCode, IsDisabled = false, - ShortName = input.MenuParentShortName, + ModuleId = input.MenuParentModuleId, Icon = menuParentIcon, Order = maxRootOrder + 1, }, autoSave: true); @@ -312,6 +317,7 @@ public class WizardDataSeeder : IDataSeedContributor, ITransientDependency Url = menuUrl, RequiredPermissionName = permRead.Name, Order = menuOrder, + ModuleId = menuParent.ModuleId, }, autoSave: true); } else if (existingMenu.Order != menuOrder || existingMenu.Url != menuUrl) @@ -593,22 +599,41 @@ public class WizardDataSeeder : IDataSeedContributor, ITransientDependency return routePath.StartsWith('/') ? routePath : "/" + routePath; } - private async Task BackfillMenuParentShortNameAsync(ListFormWizardDto input) + /// + /// Seed dosyasindaki modul kaydi yoksa olusturur; menunun ModuleId yabanci anahtari + /// tanimsiz bir module bagli kalmasin diye menu yazilmadan once cagrilir. + /// + private async Task EnsureModuleAsync(string moduleId) + { + var cleaned = moduleId?.Trim(); + if (string.IsNullOrWhiteSpace(cleaned)) + return; + + if (await _repoModule.AnyAsync(a => a.Id == cleaned)) + return; + + await _repoModule.InsertAsync(new Module(cleaned) { Name = cleaned }, autoSave: true); + _logger.LogInformation("Module '{ModuleId}' seed sirasinda olusturuldu.", cleaned); + } + + private async Task BackfillMenuParentModuleIdAsync(ListFormWizardDto input) { if (string.IsNullOrWhiteSpace(input.MenuParentCode) || - string.IsNullOrWhiteSpace(input.MenuParentShortName)) + string.IsNullOrWhiteSpace(input.MenuParentModuleId)) return; + await EnsureModuleAsync(input.MenuParentModuleId); + var menuParent = await _repoMenu.FirstOrDefaultAsync(a => a.Code == input.MenuParentCode); - if (menuParent == null || !string.IsNullOrWhiteSpace(menuParent.ShortName)) + if (menuParent == null || !string.IsNullOrWhiteSpace(menuParent.ModuleId)) return; - menuParent.ShortName = input.MenuParentShortName.Trim(); + menuParent.ModuleId = input.MenuParentModuleId.Trim(); await _repoMenu.UpdateAsync(menuParent, autoSave: true); _logger.LogInformation( - "Menu parent '{MenuParentCode}' ShortName backfilled as '{ShortName}'.", + "Menu parent '{MenuParentCode}' ModuleId backfilled as '{ModuleId}'.", input.MenuParentCode, - menuParent.ShortName); + menuParent.ModuleId); } private static bool HasWorkflow(WorkflowDto workflow) diff --git a/api/src/Sozsoft.Platform.Domain.Shared/Enums/MenuPrefixEnum.cs b/api/src/Sozsoft.Platform.Domain.Shared/Enums/MenuPrefixEnum.cs index 7668905d..279d03b1 100644 --- a/api/src/Sozsoft.Platform.Domain.Shared/Enums/MenuPrefixEnum.cs +++ b/api/src/Sozsoft.Platform.Domain.Shared/Enums/MenuPrefixEnum.cs @@ -4,17 +4,8 @@ namespace Sozsoft.Platform.Enums; public enum MenuPrefix { - Saas, + Sas, Administration, - Crm, - Coordinator, - SupplyChain, - Maintenance, - Store, - Project, - Hr, - Mrp, - Accounting } public static class MenuPrefixExtensions @@ -23,17 +14,8 @@ public static class MenuPrefixExtensions { return menu switch { - MenuPrefix.Saas => "Sas", + MenuPrefix.Sas => "Sas", MenuPrefix.Administration => "Adm", - MenuPrefix.Crm => "Crm", - MenuPrefix.Coordinator => "Crd", - MenuPrefix.SupplyChain => "Scp", - MenuPrefix.Maintenance => "Mnt", - MenuPrefix.Store => "Str", - MenuPrefix.Project => "Prj", - MenuPrefix.Hr => "Hr", - MenuPrefix.Mrp => "Mrp", - MenuPrefix.Accounting => "Acc", _ => throw new ArgumentOutOfRangeException(nameof(menu), menu, null) }; } diff --git a/api/src/Sozsoft.Platform.Domain.Shared/Enums/TableNameEnum.cs b/api/src/Sozsoft.Platform.Domain.Shared/Enums/TableNameEnum.cs index fdc744d2..4bffdd49 100644 --- a/api/src/Sozsoft.Platform.Domain.Shared/Enums/TableNameEnum.cs +++ b/api/src/Sozsoft.Platform.Domain.Shared/Enums/TableNameEnum.cs @@ -20,7 +20,7 @@ public enum TableNameEnum BranchUsers, GlobalSearch, Route, - MenuGroup, + Module, Menu, DataSource, ListForm, diff --git a/api/src/Sozsoft.Platform.Domain.Shared/Enums/TablePrefixEnum.cs b/api/src/Sozsoft.Platform.Domain.Shared/Enums/TablePrefixEnum.cs index ed9357b4..27d8b273 100644 --- a/api/src/Sozsoft.Platform.Domain.Shared/Enums/TablePrefixEnum.cs +++ b/api/src/Sozsoft.Platform.Domain.Shared/Enums/TablePrefixEnum.cs @@ -8,18 +8,18 @@ public static class TablePrefix public const string TenantPrefix = "T"; public const string BranchPrefix = "B"; - public static string PlatformByName(MenuPrefix MenuGroup, TableNameEnum tableName) + public static string PlatformByName(MenuPrefix menuPrefix, TableNameEnum tableName) { - return $"{MenuPrefixExtensions.ToPrefix(MenuGroup)}_{HostPrefix}_{tableName}"; + return $"{MenuPrefixExtensions.ToPrefix(menuPrefix)}_{HostPrefix}_{tableName}"; } - public static string TenantByName(MenuPrefix MenuGroup, TableNameEnum tableName) + public static string TenantByName(MenuPrefix menuPrefix, TableNameEnum tableName) { - return $"{MenuPrefixExtensions.ToPrefix(MenuGroup)}_{TenantPrefix}_{tableName}"; + return $"{MenuPrefixExtensions.ToPrefix(menuPrefix)}_{TenantPrefix}_{tableName}"; } - public static string BranchByName(MenuPrefix MenuGroup, TableNameEnum tableName) + public static string BranchByName(MenuPrefix menuPrefix, TableNameEnum tableName) { - return $"{MenuPrefixExtensions.ToPrefix(MenuGroup)}_{BranchPrefix}_{tableName}"; + return $"{MenuPrefixExtensions.ToPrefix(menuPrefix)}_{BranchPrefix}_{tableName}"; } } diff --git a/api/src/Sozsoft.Platform.Domain.Shared/PlatformConsts.cs b/api/src/Sozsoft.Platform.Domain.Shared/PlatformConsts.cs index 094ed6a1..22394d84 100644 --- a/api/src/Sozsoft.Platform.Domain.Shared/PlatformConsts.cs +++ b/api/src/Sozsoft.Platform.Domain.Shared/PlatformConsts.cs @@ -30,7 +30,7 @@ public static class PlatformConsts public static class Permissions { - public const string MenuGroup = "MenuGroup"; + public const string Modules = "Modules"; } public static class Tenants @@ -52,7 +52,7 @@ public static class PlatformConsts public const string FaxNumber = "FaxNumber"; public const string Email = "Email"; public const string Website = "Website"; - public const string MenuGroup = "MenuGroup"; + public const string Modules = "Modules"; } public static class Branches @@ -465,7 +465,7 @@ public static class PlatformConsts public const string Default = Prefix.App + ".Menus"; public const string Routes = Default + ".Routes"; - public const string MenuGroup = Default + ".MenuGroup"; + public const string Module = Default + ".Module"; public const string Menu = Default + ".Menu"; public const string Manager = Default + ".Manager"; } diff --git a/api/src/Sozsoft.Platform.Domain.Shared/TableNameResolver.cs b/api/src/Sozsoft.Platform.Domain.Shared/TableNameResolver.cs index 9747a873..934cdb6c 100644 --- a/api/src/Sozsoft.Platform.Domain.Shared/TableNameResolver.cs +++ b/api/src/Sozsoft.Platform.Domain.Shared/TableNameResolver.cs @@ -12,67 +12,67 @@ public static class TableNameResolver _map = new(StringComparer.OrdinalIgnoreCase) { // 🔹 SAAS TABLOLARI - { nameof(TableNameEnum.DbTableColumn), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.LogEntry), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.AiBot), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ChangeLog), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.GlobalSearch), (TablePrefix.TenantByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ContactTitle), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Currency), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.CountryGroup), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Country), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.City), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.District), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.SkillType), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Skill), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.SkillLevel), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.UomCategory), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Uom), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Branch), (TablePrefix.TenantByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.BranchUsers), (TablePrefix.TenantByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.SettingDefinition), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Language), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.LanguageKey), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.LanguageText), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.DataSource), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ListForm), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ListFormField), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ListFormCustomization), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ListFormImport), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ListFormImportLog), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ListFormWorkflow), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Notification), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.NotificationRule), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.NotificationType), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.BackgroundWorker), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.BackgroundWorker_JobFlow), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.BackgroundWorker_MailQueue), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.BackgroundWorker_MailQueueEvents), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.BackgroundWorker_MailQueueTableFormat), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ForumCategory), (TablePrefix.TenantByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ForumTopic), (TablePrefix.TenantByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.ForumPost), (TablePrefix.TenantByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Home), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.About), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Service), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Product), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.PaymentMethod), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.InstallmentOption), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Order), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.OrderItem), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.OrderItem_ByTenantId), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.BlogCategory), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.BlogPost), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Demo), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Contact), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Route), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.MenuGroup), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.Menu), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.CrudEndpoint), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.CustomEndpoint), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.CustomComponent), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.DynamicService), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, - { nameof(TableNameEnum.DevRequest), (TablePrefix.PlatformByName, MenuPrefix.Saas) }, + { nameof(TableNameEnum.DbTableColumn), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.LogEntry), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.AiBot), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ChangeLog), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.GlobalSearch), (TablePrefix.TenantByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ContactTitle), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Currency), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.CountryGroup), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Country), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.City), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.District), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.SkillType), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Skill), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.SkillLevel), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.UomCategory), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Uom), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Branch), (TablePrefix.TenantByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.BranchUsers), (TablePrefix.TenantByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.SettingDefinition), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Language), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.LanguageKey), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.LanguageText), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.DataSource), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ListForm), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ListFormField), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ListFormCustomization), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ListFormImport), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ListFormImportLog), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ListFormWorkflow), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Notification), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.NotificationRule), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.NotificationType), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.BackgroundWorker), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.BackgroundWorker_JobFlow), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.BackgroundWorker_MailQueue), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.BackgroundWorker_MailQueueEvents), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.BackgroundWorker_MailQueueTableFormat), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ForumCategory), (TablePrefix.TenantByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ForumTopic), (TablePrefix.TenantByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.ForumPost), (TablePrefix.TenantByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Home), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.About), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Service), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Product), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.PaymentMethod), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.InstallmentOption), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Order), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.OrderItem), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.OrderItem_ByTenantId), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.BlogCategory), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.BlogPost), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Demo), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Contact), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Route), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Module), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.Menu), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.CrudEndpoint), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.CustomEndpoint), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.CustomComponent), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.DynamicService), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, + { nameof(TableNameEnum.DevRequest), (TablePrefix.PlatformByName, MenuPrefix.Sas) }, // 🔹 ADMINISTRATION TABLOLARI { nameof(TableNameEnum.Sector), (TablePrefix.TenantByName, MenuPrefix.Administration) }, diff --git a/api/src/Sozsoft.Platform.Domain/Data/SeedConsts.cs b/api/src/Sozsoft.Platform.Domain/Data/SeedConsts.cs index 5ce44a84..898e5f8d 100644 --- a/api/src/Sozsoft.Platform.Domain/Data/SeedConsts.cs +++ b/api/src/Sozsoft.Platform.Domain/Data/SeedConsts.cs @@ -461,7 +461,7 @@ public static class SeedConsts public const string Default = Prefix.App + ".Menus"; public const string Routes = Default + ".Routes"; - public const string MenuGroup = Default + ".MenuGroup"; + public const string Module = Default + ".Module"; public const string Menu = Default + ".Menu"; public const string Manager = Default + ".Manager"; } diff --git a/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Menu.cs b/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Menu.cs index ce0c5db2..93fdd6a8 100644 --- a/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Menu.cs +++ b/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Menu.cs @@ -13,7 +13,7 @@ public class Menu : Entity public string ParentCode { get; set; } public string CssClass { get; set; } public string RequiredPermissionName { get; set; } - public string ShortName { get; set; } // Örn: "HR", "INV", "CRM" + public string ModuleId { get; set; } // Modul referansi (Module.Id) public string Target { get; set; } public bool IsDisabled { get; set; } diff --git a/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/MenuGroup.cs b/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Module.cs similarity index 66% rename from api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/MenuGroup.cs rename to api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Module.cs index 9f521453..94d236ea 100644 --- a/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/MenuGroup.cs +++ b/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Module.cs @@ -2,11 +2,11 @@ namespace Sozsoft.Platform.Entities; -public class MenuGroup : Entity +public class Module : Entity { public string Name { get; set; } - public MenuGroup(string id) + public Module(string id) { Id = id; } diff --git a/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Website/Order.cs b/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Website/Order.cs index 7270bba6..72cc0394 100644 --- a/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Website/Order.cs +++ b/api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/Website/Order.cs @@ -23,7 +23,7 @@ public class Order : FullAuditedEntity public string FaxNumber { get; set; } public string Email { get; set; } public string Website { get; set; } - public string MenuGroup { get; set; } + public string Modules { get; set; } public bool IsExisting { get; set; } public bool IsActive { get; set; } diff --git a/api/src/Sozsoft.Platform.Domain/Extensions/AbpPermissionsExtensions.cs b/api/src/Sozsoft.Platform.Domain/Extensions/AbpPermissionsExtensions.cs index 30e5c510..db05ca39 100644 --- a/api/src/Sozsoft.Platform.Domain/Extensions/AbpPermissionsExtensions.cs +++ b/api/src/Sozsoft.Platform.Domain/Extensions/AbpPermissionsExtensions.cs @@ -8,41 +8,41 @@ namespace Sozsoft.Platform.Extensions; public static class AbpPermissionsExtensions { /// - /// Menü gruplarını pipe karakteriyle ayrılmış string olarak kaydeder. (örnek: "Erp|Kurs") + /// Yetkinin ait olduğu modülleri pipe karakteriyle ayrılmış string olarak kaydeder. (örnek: "Sas|Adm") /// - public static void SetMenuGroup(this PermissionDefinitionRecord permission, string menuGroup) + public static void SetModules(this PermissionDefinitionRecord permission, string modules) { - if (string.IsNullOrWhiteSpace(menuGroup)) + if (string.IsNullOrWhiteSpace(modules)) { - permission.SetProperty(PlatformConsts.Permissions.MenuGroup, null); + permission.SetProperty(PlatformConsts.Permissions.Modules, null); return; } // 🔹 Gereksiz boşlukları temizle var cleaned = string.Join( "|", - menuGroup + modules .Split(PlatformConsts.MultiValueDelimiter, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) .Distinct() ); - // 🔹 Veritabanına "Erp|Kurs" formatında kaydet - permission.SetProperty(PlatformConsts.Permissions.MenuGroup, cleaned); + // 🔹 Veritabanına "Sas|Adm" formatında kaydet + permission.SetProperty(PlatformConsts.Permissions.Modules, cleaned); } /// - /// Menü gruplarını veritabanındaki pipe formatından string[] olarak döndürür. (örnek: "Erp|Kurs" → ["Erp", "Kurs"]) + /// Modülleri veritabanındaki pipe formatından string[] olarak döndürür. (örnek: "Sas|Adm" → ["Sas", "Adm"]) /// - public static string[] GetMenuGroup(this PermissionDefinitionRecord permission) + public static string[] GetModules(this PermissionDefinitionRecord permission) { - var value = permission.GetProperty(PlatformConsts.Permissions.MenuGroup); + var value = permission.GetProperty(PlatformConsts.Permissions.Modules); if (string.IsNullOrWhiteSpace(value)) { return Array.Empty(); } - // 🔹 "Erp|Kurs" -> ["Erp", "Kurs"] + // 🔹 "Sas|Adm" -> ["Sas", "Adm"] return value .Split(PlatformConsts.MultiValueDelimiter, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) .Distinct() diff --git a/api/src/Sozsoft.Platform.Domain/Extensions/AbpTenantExtensions.cs b/api/src/Sozsoft.Platform.Domain/Extensions/AbpTenantExtensions.cs index 8367f4ae..050423a6 100644 --- a/api/src/Sozsoft.Platform.Domain/Extensions/AbpTenantExtensions.cs +++ b/api/src/Sozsoft.Platform.Domain/Extensions/AbpTenantExtensions.cs @@ -1,4 +1,6 @@ -using Volo.Abp.Data; +using System; +using System.Linq; +using Volo.Abp.Data; using Volo.Abp.TenantManagement; namespace Sozsoft.Platform.Extensions; @@ -156,13 +158,51 @@ public static class AbpTenantExtensions return tenant.GetProperty(PlatformConsts.Tenants.Website); } - public static void SetMenuGroup(this Tenant tenant, string menuGroup) + /// + /// Kiracinin gorebilecegi modulleri pipe ile ayrilmis tek string olarak kaydeder. (ornek: "Saas|Adm") + /// + public static void SetModules(this Tenant tenant, string modules) { - tenant.SetProperty(PlatformConsts.Tenants.MenuGroup, menuGroup); + if (string.IsNullOrWhiteSpace(modules)) + { + tenant.SetProperty(PlatformConsts.Tenants.Modules, null); + return; + } + + var cleaned = string.Join( + PlatformConsts.MultiValueDelimiter, + modules + .Split(PlatformConsts.MultiValueDelimiter, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) + .Distinct() + ); + + tenant.SetProperty(PlatformConsts.Tenants.Modules, cleaned); } - public static string GetMenuGroup(this Tenant tenant) + + /// + /// Kiracinin modullerini pipe formatindan dizi olarak dondurur. ("Sas|Adm" -> ["Sas", "Adm"]) + /// + public static string[] GetModules(this Tenant tenant) { - return tenant.GetProperty(PlatformConsts.Tenants.MenuGroup); + var value = tenant.GetModulesRaw(); + + if (string.IsNullOrWhiteSpace(value)) + { + return []; + } + + return value + .Split(PlatformConsts.MultiValueDelimiter, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) + .Distinct() + .ToArray(); + } + + /// + /// Modul listesini veritabanindaki ham haliyle dondurur. (ornek: "Saas|Adm") + /// + public static string GetModulesRaw(this Tenant tenant) + { + return tenant.GetProperty(PlatformConsts.Tenants.Modules); } } diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Sozsoft.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index dae86dab..312e970b 100644 --- a/api/src/Sozsoft.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Sozsoft.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -51,7 +51,7 @@ public class PlatformDbContext : public DbSet GlobalSearchs { get; set; } public DbSet Routes { get; set; } public DbSet Menus { get; set; } - public DbSet MenuGroups { get; set; } + public DbSet Modules { get; set; } public DbSet DataSources { get; set; } public DbSet ListForms { get; set; } public DbSet ListFormFields { get; set; } @@ -294,11 +294,12 @@ public class PlatformDbContext : b.HasIndex(x => new { x.Path }).IsUnique().HasFilter("[IsDeleted] = 0"); }); - builder.Entity(b => + builder.Entity(b => { - b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.MenuGroup)), Prefix.DbSchema); + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Module)), Prefix.DbSchema); b.ConfigureByConvention(); + b.Property(a => a.Id).HasMaxLength(128); b.Property(a => a.Name).IsRequired().HasMaxLength(128); b.HasIndex(x => new { x.Name }).IsUnique().HasFilter(null); @@ -321,8 +322,16 @@ public class PlatformDbContext : b.Property(a => a.UserId).HasMaxLength(256); b.Property(a => a.RoleId).HasMaxLength(256); b.Property(a => a.CultureName).HasMaxLength(64); + b.Property(a => a.ModuleId).HasMaxLength(128); + + b.HasOne() + .WithMany() + .HasPrincipalKey(x => x.Id) + .HasForeignKey(x => x.ModuleId) + .OnDelete(DeleteBehavior.Restrict); b.HasIndex(x => new { x.Code }).IsUnique().HasFilter(null); + b.HasIndex(x => new { x.ModuleId }); }); builder.Entity(b => @@ -1066,7 +1075,7 @@ public class PlatformDbContext : b.Property(o => o.FaxNumber).HasMaxLength(20); b.Property(o => o.Email).HasMaxLength(128); b.Property(o => o.Website).HasMaxLength(128); - b.Property(o => o.MenuGroup).HasMaxLength(64); + b.Property(o => o.Modules).HasMaxLength(256); b.Property(o => o.BillingCycle).HasMaxLength(32); b.Property(o => o.Period).IsRequired().HasDefaultValue(1); diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformEfCoreEntityExtensionMappings.cs b/api/src/Sozsoft.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformEfCoreEntityExtensionMappings.cs index ab7e2b93..72093597 100644 --- a/api/src/Sozsoft.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformEfCoreEntityExtensionMappings.cs +++ b/api/src/Sozsoft.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformEfCoreEntityExtensionMappings.cs @@ -472,19 +472,19 @@ public static class PlatformEfCoreEntityExtensionMappings ObjectExtensionManager.Instance .MapEfCoreProperty( - PlatformConsts.Tenants.MenuGroup, + PlatformConsts.Tenants.Modules, (entityBuilder, propertyBuilder) => { - propertyBuilder.HasMaxLength(64).HasDefaultValue(null); + propertyBuilder.HasMaxLength(256).HasDefaultValue(null); } ); ObjectExtensionManager.Instance .MapEfCoreProperty( - PlatformConsts.Permissions.MenuGroup, + PlatformConsts.Permissions.Modules, (entityBuilder, propertyBuilder) => { - propertyBuilder.HasMaxLength(64).HasDefaultValue(null); + propertyBuilder.HasMaxLength(256).HasDefaultValue(null); } ); }); diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260828094327_Initial.Designer.cs b/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260831095952_Initial.Designer.cs similarity index 99% rename from api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260828094327_Initial.Designer.cs rename to api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260831095952_Initial.Designer.cs index f0d1e99e..c122b80b 100644 --- a/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260828094327_Initial.Designer.cs +++ b/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260831095952_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Sozsoft.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20260828094327_Initial")] + [Migration("20260831095952_Initial")] partial class Initial { /// @@ -4056,6 +4056,10 @@ namespace Sozsoft.Platform.Migrations b.Property("IsDisabled") .HasColumnType("bit"); + b.Property("ModuleId") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + b.Property("Order") .HasColumnType("int"); @@ -4071,9 +4075,6 @@ namespace Sozsoft.Platform.Migrations .HasMaxLength(256) .HasColumnType("nvarchar(256)"); - b.Property("ShortName") - .HasColumnType("nvarchar(max)"); - b.Property("Target") .HasMaxLength(64) .HasColumnType("nvarchar(64)"); @@ -4091,27 +4092,11 @@ namespace Sozsoft.Platform.Migrations b.HasIndex("Code") .IsUnique(); + b.HasIndex("ModuleId"); + b.ToTable("Sas_H_Menu", (string)null); }); - modelBuilder.Entity("Sozsoft.Platform.Entities.MenuGroup", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("Sas_H_MenuGroup", (string)null); - }); - modelBuilder.Entity("Sozsoft.Platform.Entities.MessengerConversation", b => { b.Property("Id") @@ -4266,6 +4251,25 @@ namespace Sozsoft.Platform.Migrations b.ToTable("Adm_T_MessengerConversationMessage", (string)null); }); + modelBuilder.Entity("Sozsoft.Platform.Entities.Module", b => + { + b.Property("Id") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("Sas_H_Module", (string)null); + }); + modelBuilder.Entity("Sozsoft.Platform.Entities.Note", b => { b.Property("Id") @@ -4447,14 +4451,14 @@ namespace Sozsoft.Platform.Migrations b.Property("LicenseStartTime") .HasColumnType("datetime2"); - b.Property("MenuGroup") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - b.Property("MobileNumber") .HasMaxLength(20) .HasColumnType("nvarchar(20)"); + b.Property("Modules") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + b.Property("OrganizationName") .HasMaxLength(128) .HasColumnType("nvarchar(128)"); @@ -8490,9 +8494,9 @@ namespace Sozsoft.Platform.Migrations b.Property("IsEnabled") .HasColumnType("bit"); - b.Property("MenuGroup") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); + b.Property("Modules") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("MultiTenancySide") .HasColumnType("tinyint"); @@ -8754,14 +8758,14 @@ namespace Sozsoft.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("MenuGroup") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - b.Property("MobileNumber") .HasMaxLength(20) .HasColumnType("nvarchar(20)"); + b.Property("Modules") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + b.Property("Name") .IsRequired() .HasMaxLength(64) @@ -9055,6 +9059,14 @@ namespace Sozsoft.Platform.Migrations .IsRequired(); }); + modelBuilder.Entity("Sozsoft.Platform.Entities.Menu", b => + { + b.HasOne("Sozsoft.Platform.Entities.Module", null) + .WithMany() + .HasForeignKey("ModuleId") + .OnDelete(DeleteBehavior.Restrict); + }); + modelBuilder.Entity("Sozsoft.Platform.Entities.MessengerConversationMessage", b => { b.HasOne("Sozsoft.Platform.Entities.MessengerConversation", "Conversation") diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260828094327_Initial.cs b/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260831095952_Initial.cs similarity index 99% rename from api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260828094327_Initial.cs rename to api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260831095952_Initial.cs index de702d30..224000d5 100644 --- a/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260828094327_Initial.cs +++ b/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260831095952_Initial.cs @@ -242,7 +242,7 @@ namespace Sozsoft.Platform.Migrations Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), StateCheckers = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - MenuGroup = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true) + Modules = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true) }, constraints: table => { @@ -368,8 +368,8 @@ namespace Sozsoft.Platform.Migrations FaxNumber = table.Column(type: "nvarchar(20)", maxLength: 20, nullable: true), Founder = table.Column(type: "nvarchar(max)", nullable: true), IsActive = table.Column(type: "bit", nullable: false, defaultValue: true), - MenuGroup = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), MobileNumber = table.Column(type: "nvarchar(20)", maxLength: 20, nullable: true), + Modules = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), OrganizationName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), PhoneNumber = table.Column(type: "nvarchar(20)", maxLength: 20, nullable: true), PostalCode = table.Column(type: "nvarchar(10)", maxLength: 10, nullable: true), @@ -1570,41 +1570,15 @@ namespace Sozsoft.Platform.Migrations }); migrationBuilder.CreateTable( - name: "Sas_H_Menu", + name: "Sas_H_Module", columns: table => new { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Code = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - DisplayName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - Order = table.Column(type: "int", nullable: false), - Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - Icon = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - ParentCode = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - CssClass = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), - RequiredPermissionName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), - ShortName = table.Column(type: "nvarchar(max)", nullable: true), - Target = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - IsDisabled = table.Column(type: "bit", nullable: false), - ElementId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - UserId = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - RoleId = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - CultureName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Sas_H_Menu", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Sas_H_MenuGroup", - columns: table => new - { - Id = table.Column(type: "nvarchar(450)", nullable: false), + Id = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false) }, constraints: table => { - table.PrimaryKey("PK_Sas_H_MenuGroup", x => x.Id); + table.PrimaryKey("PK_Sas_H_Module", x => x.Id); }); migrationBuilder.CreateTable( @@ -1648,7 +1622,7 @@ namespace Sozsoft.Platform.Migrations FaxNumber = table.Column(type: "nvarchar(20)", maxLength: 20, nullable: true), Email = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), Website = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), - MenuGroup = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + Modules = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), IsExisting = table.Column(type: "bit", nullable: false, defaultValue: false), IsActive = table.Column(type: "bit", nullable: false, computedColumnSql: "CONVERT(bit, CASE WHEN [LicenseEndTime] IS NOT NULL AND CONVERT(date, GETDATE()) > CONVERT(date, [LicenseEndTime]) THEN 0 ELSE 1 END)", stored: false), BillingCycle = table.Column(type: "nvarchar(32)", maxLength: 32, nullable: true), @@ -2954,6 +2928,38 @@ namespace Sozsoft.Platform.Migrations onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "Sas_H_Menu", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + Code = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + DisplayName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + Order = table.Column(type: "int", nullable: false), + Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + Icon = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + ParentCode = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + CssClass = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + RequiredPermissionName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + ModuleId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Target = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + IsDisabled = table.Column(type: "bit", nullable: false), + ElementId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + UserId = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + RoleId = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + CultureName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Sas_H_Menu", x => x.Id); + table.ForeignKey( + name: "FK_Sas_H_Menu_Sas_H_Module_ModuleId", + column: x => x.ModuleId, + principalTable: "Sas_H_Module", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + migrationBuilder.CreateTable( name: "Sas_H_NotificationRule", columns: table => new @@ -4229,8 +4235,13 @@ namespace Sozsoft.Platform.Migrations unique: true); migrationBuilder.CreateIndex( - name: "IX_Sas_H_MenuGroup_Name", - table: "Sas_H_MenuGroup", + name: "IX_Sas_H_Menu_ModuleId", + table: "Sas_H_Menu", + column: "ModuleId"); + + migrationBuilder.CreateIndex( + name: "IX_Sas_H_Module_Name", + table: "Sas_H_Module", column: "Name", unique: true); @@ -4596,9 +4607,6 @@ namespace Sozsoft.Platform.Migrations migrationBuilder.DropTable( name: "Sas_H_Menu"); - migrationBuilder.DropTable( - name: "Sas_H_MenuGroup"); - migrationBuilder.DropTable( name: "Sas_H_Notification"); @@ -4704,6 +4712,9 @@ namespace Sozsoft.Platform.Migrations migrationBuilder.DropTable( name: "Sas_H_ListFormImport"); + migrationBuilder.DropTable( + name: "Sas_H_Module"); + migrationBuilder.DropTable( name: "Sas_H_NotificationRule"); diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 99b4aaaf..f1402162 100644 --- a/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -4053,6 +4053,10 @@ namespace Sozsoft.Platform.Migrations b.Property("IsDisabled") .HasColumnType("bit"); + b.Property("ModuleId") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + b.Property("Order") .HasColumnType("int"); @@ -4068,9 +4072,6 @@ namespace Sozsoft.Platform.Migrations .HasMaxLength(256) .HasColumnType("nvarchar(256)"); - b.Property("ShortName") - .HasColumnType("nvarchar(max)"); - b.Property("Target") .HasMaxLength(64) .HasColumnType("nvarchar(64)"); @@ -4088,27 +4089,11 @@ namespace Sozsoft.Platform.Migrations b.HasIndex("Code") .IsUnique(); + b.HasIndex("ModuleId"); + b.ToTable("Sas_H_Menu", (string)null); }); - modelBuilder.Entity("Sozsoft.Platform.Entities.MenuGroup", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("Sas_H_MenuGroup", (string)null); - }); - modelBuilder.Entity("Sozsoft.Platform.Entities.MessengerConversation", b => { b.Property("Id") @@ -4263,6 +4248,25 @@ namespace Sozsoft.Platform.Migrations b.ToTable("Adm_T_MessengerConversationMessage", (string)null); }); + modelBuilder.Entity("Sozsoft.Platform.Entities.Module", b => + { + b.Property("Id") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("Sas_H_Module", (string)null); + }); + modelBuilder.Entity("Sozsoft.Platform.Entities.Note", b => { b.Property("Id") @@ -4444,14 +4448,14 @@ namespace Sozsoft.Platform.Migrations b.Property("LicenseStartTime") .HasColumnType("datetime2"); - b.Property("MenuGroup") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - b.Property("MobileNumber") .HasMaxLength(20) .HasColumnType("nvarchar(20)"); + b.Property("Modules") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + b.Property("OrganizationName") .HasMaxLength(128) .HasColumnType("nvarchar(128)"); @@ -8487,9 +8491,9 @@ namespace Sozsoft.Platform.Migrations b.Property("IsEnabled") .HasColumnType("bit"); - b.Property("MenuGroup") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); + b.Property("Modules") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); b.Property("MultiTenancySide") .HasColumnType("tinyint"); @@ -8751,14 +8755,14 @@ namespace Sozsoft.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("MenuGroup") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - b.Property("MobileNumber") .HasMaxLength(20) .HasColumnType("nvarchar(20)"); + b.Property("Modules") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + b.Property("Name") .IsRequired() .HasMaxLength(64) @@ -9052,6 +9056,14 @@ namespace Sozsoft.Platform.Migrations .IsRequired(); }); + modelBuilder.Entity("Sozsoft.Platform.Entities.Menu", b => + { + b.HasOne("Sozsoft.Platform.Entities.Module", null) + .WithMany() + .HasForeignKey("ModuleId") + .OnDelete(DeleteBehavior.Restrict); + }); + modelBuilder.Entity("Sozsoft.Platform.Entities.MessengerConversationMessage", b => { b.HasOne("Sozsoft.Platform.Entities.MessengerConversation", "Conversation") diff --git a/claude.md b/claude.md index ff79c2d7..011c6c3c 100644 --- a/claude.md +++ b/claude.md @@ -164,7 +164,7 @@ Bir çelişki varsa sıra: `ai.instructions.md` → `dotnet.instructions.md` → `crud/{Entity}.json`. - **Wizard dosyası** → tek başına taşınmaz; export zip'i `wizard/`, `custom/`, `crud/` ve `{sql|postgres}/{object|execute}/` bağımlılıklarını da içerir. -- **`MenusData.json`** → `Routes` bölümüne dokunma; yalnızca `MenuGroups` ve `Menus`. +- **`MenusData.json`** → `Routes` bölümüne dokunma; yalnızca `Modules` ve `Menus`. ### Definition of done diff --git a/configs/seeds/host/wizard/20260819131500_RoleList.json b/configs/seeds/host/wizard/20260819131500_RoleList.json index 8622706a..7ab7cf8a 100644 --- a/configs/seeds/host/wizard/20260819131500_RoleList.json +++ b/configs/seeds/host/wizard/20260819131500_RoleList.json @@ -35,8 +35,8 @@ "PermissionGroupName": "App.Wizard.Sample", "PermissionGroupDisplayNameEn": "Sample", "PermissionGroupDisplayNameTr": "Sample", + "MenuParentModuleId": "Sam", "MenuParentCode": "App.Wizard.Sample", - "MenuParentShortName": "Sam", "MenuParentIcon": "FcBookmark", "MenuIcon": "FcBiohazard", "DataSourceCode": "Default", diff --git a/ui/src/components/orders/TenantForm.tsx b/ui/src/components/orders/TenantForm.tsx index e7dc33ce..41c7b06e 100644 --- a/ui/src/components/orders/TenantForm.tsx +++ b/ui/src/components/orders/TenantForm.tsx @@ -538,7 +538,7 @@ export const TenantForm: React.FC = ({ onSubmit }) => { address2: tenant.data.address2, email: tenant.data.email, website: tenant.data.website, - menuGroup: tenant.data.menuGroup, + modules: tenant.data.modules, })) if (tenant.data.name) setFoundTenantName(tenant.data.name) diff --git a/ui/src/components/shared/TenantSelector.tsx b/ui/src/components/shared/TenantSelector.tsx index eca2acb8..c0633dbd 100644 --- a/ui/src/components/shared/TenantSelector.tsx +++ b/ui/src/components/shared/TenantSelector.tsx @@ -74,7 +74,7 @@ const TenantSelector = () => { setTenant({ tenantId: response.data.id, tenantName: response.data.name, - menuGroup: response.data.menuGroup, + modules: response.data.modules, }) } else { setTenant(undefined) diff --git a/ui/src/constants/permission.constant.ts b/ui/src/constants/permission.constant.ts index 317232e1..869d7eff 100644 --- a/ui/src/constants/permission.constant.ts +++ b/ui/src/constants/permission.constant.ts @@ -43,3 +43,16 @@ export const COMPONENT_PERMISSION = { UPDATE: 'App.DeveloperKit.Components.Update', DELETE: 'App.DeveloperKit.Components.Delete', } as const + +/** + * ListForm alan (Fields) yoneticisi yetkileri. `PermissionsData.json` icinde tanimlidir ve + * seeder ile yonetilir; buradaki kontroller yalnizca butonlari kapatir, asil kontrol + * `ListFormFieldsAppService` uzerindeki ABP policy adlarindadir. + */ +export const LISTFORM_FIELD_PERMISSION = { + /** Alan listesini gorme (okuma) yetkisi; alt yetkilerin tamaminin ustudur. */ + DEFAULT: 'App.Listforms.ListformField', + CREATE: 'App.Listforms.ListformField.Create', + UPDATE: 'App.Listforms.ListformField.Update', + DELETE: 'App.Listforms.ListformField.Delete', +} as const diff --git a/ui/src/proxy/admin/wizard/models.ts b/ui/src/proxy/admin/wizard/models.ts index c14052f6..20c75a7a 100644 --- a/ui/src/proxy/admin/wizard/models.ts +++ b/ui/src/proxy/admin/wizard/models.ts @@ -89,7 +89,7 @@ export interface ListFormWizardDto { /** Izin grubunun Turkce gorunen adi. */ permissionGroupDisplayNameTr: string menuParentCode: string - menuParentShortName?: string + menuParentModuleId?: string menuParentIcon?: string menuIcon: string dataSourceCode: string diff --git a/ui/src/proxy/config/models.ts b/ui/src/proxy/config/models.ts index a3741736..f3a166c8 100644 --- a/ui/src/proxy/config/models.ts +++ b/ui/src/proxy/config/models.ts @@ -38,7 +38,7 @@ export interface CustomTenantDto extends TenantDto { faxNumber: string email: string website: string - menuGroup?: string + modules?: string reference?: string } diff --git a/ui/src/proxy/menus/models.ts b/ui/src/proxy/menus/models.ts index 2a37d195..9e9223fa 100644 --- a/ui/src/proxy/menus/models.ts +++ b/ui/src/proxy/menus/models.ts @@ -15,7 +15,7 @@ export interface MenuDto extends FullAuditedEntityDto { userId?: string roleId?: string cultureName?: string - shortName?: string + moduleId?: string menuTextTr?: string menuTextEn?: string } diff --git a/ui/src/proxy/menus/navigation.ts b/ui/src/proxy/menus/navigation.ts index 0cfcbc83..dd4f2e39 100644 --- a/ui/src/proxy/menus/navigation.ts +++ b/ui/src/proxy/menus/navigation.ts @@ -8,5 +8,5 @@ export interface NavigationTree { type: 'title' | 'collapse' | 'item' authority: string[] subMenu: NavigationTree[] - shortName?: string + moduleId?: string } diff --git a/ui/src/services/menu.service.ts b/ui/src/services/menu.service.ts index a966b054..e4428c1f 100644 --- a/ui/src/services/menu.service.ts +++ b/ui/src/services/menu.service.ts @@ -2,7 +2,7 @@ import { PagedAndSortedResultRequestDto, PagedResultDto } from '@/proxy/abp' import { MenuDto } from '@/proxy/menus/models' import apiService from '@/services/api.service' -export type MenuGroupLookupDto = { +export type ModuleLookupDto = { key: string name: string group?: string @@ -103,11 +103,11 @@ export class MenuService { { apiName: this.apiName }, ) - getMenuGroups = () => - apiService.fetchData( + getModules = () => + apiService.fetchData( { method: 'GET', - url: '/api/app/menu/menu-groups', + url: '/api/app/menu/modules', }, { apiName: this.apiName }, ) @@ -123,8 +123,8 @@ export const getMenus = async (skipCount = 0, maxResultCount = 1000, sorting = ' }) } -export const getMenuGroups = async () => { +export const getModules = async () => { const menuService = new MenuService() - return await menuService.getMenuGroups() + return await menuService.getModules() } diff --git a/ui/src/services/tenant.service.ts b/ui/src/services/tenant.service.ts index 00854b29..f3e08ab6 100644 --- a/ui/src/services/tenant.service.ts +++ b/ui/src/services/tenant.service.ts @@ -6,7 +6,7 @@ import apiService from './api.service' export type CreateTenantFromOrderInput = { orderId: string name: string - menuGroup: string + modules: string } export const getTenants = (skipCount = 0, maxResultCount = 10) => diff --git a/ui/src/store/auth.model.ts b/ui/src/store/auth.model.ts index 00fd1f70..3a61661d 100644 --- a/ui/src/store/auth.model.ts +++ b/ui/src/store/auth.model.ts @@ -26,7 +26,7 @@ export interface AuthStoreModel { tenant?: { tenantId?: string tenantName?: string - menuGroup?: string + modules?: string } } @@ -65,7 +65,7 @@ export const initialState: AuthStoreModel = { tenant: { tenantId: '', tenantName: '', - menuGroup: '', + modules: '', }, } @@ -116,7 +116,7 @@ export const authModel: AuthModel = { setTenant: action((state, payload) => { state.tenantId = payload?.tenantId state.tenantName = payload?.tenantName - state.menuGroup = payload?.menuGroup + state.modules = payload?.modules }), }, } diff --git a/ui/src/utils/acronym.ts b/ui/src/utils/acronym.ts index bb9d5da2..68414e41 100644 --- a/ui/src/utils/acronym.ts +++ b/ui/src/utils/acronym.ts @@ -1,8 +1,8 @@ export default function acronym(name = '') { - const shortName = name.match(/\b(\w)/g) + const moduleId = name.match(/\b(\w)/g) - if (shortName) { - return shortName.join('') + if (moduleId) { + return moduleId.join('') } return name diff --git a/ui/src/utils/navigation.ts b/ui/src/utils/navigation.ts index 96898b10..e1a09d18 100644 --- a/ui/src/utils/navigation.ts +++ b/ui/src/utils/navigation.ts @@ -36,7 +36,7 @@ export default function getChildren(menu: MenuDto[], parentCode: string | null): translateKey: child.displayName ?? '', authority: [child.requiredPermissionName ?? ''], subMenu: [], - shortName: child.shortName ?? '', + moduleId: child.moduleId ?? '', } if (child.code) { diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldEdit.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldEdit.tsx index 2fa84121..6eede275 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldEdit.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldEdit.tsx @@ -45,13 +45,9 @@ function FormFieldEdit({ {translate('::App.Listform.ListformField.Options')} {translate('::Abp.Identity.Permissions')} {translate('::App.ListFormFieldEdit.TabLookup')} - - {translate('::App.ListFormEdit.TabCustomization')} - + {translate('::App.ListFormEdit.TabCustomization')} {translate('::App.ListFormEdit.TabFiltering')} - - {translate('::App.ListFormFieldEdit.TabHeadering')} - + {translate('::App.ListFormFieldEdit.TabHeadering')} {translate('::App.ListFormEdit.TabGrouping')} {translate('::App.ListFormFieldEdit.TabGroupSummary')} @@ -59,9 +55,7 @@ function FormFieldEdit({ {translate('::App.ListFormFieldEdit.TabTotalSummary')} - - {translate('::App.ListFormFieldEdit.TabJoinOptions')} - + {translate('::App.ListFormFieldEdit.TabJoinOptions')} {translate('::App.ListFormField.CopyFieldsCssOptions')} diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabConditionalFormatting.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabConditionalFormatting.tsx index 2bd56f1c..33edbe1d 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabConditionalFormatting.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabConditionalFormatting.tsx @@ -32,6 +32,7 @@ import { ColumnValidationComparisonTypeEnum, } from '@/proxy/form/models' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' const NewItem: ColumnStylingDto = { rowType: ColumnRowTypeListOptions.Data, @@ -52,6 +53,7 @@ function FormFieldTabConditionalFormatting({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() const [isLoading, setIsLoading] = useState(false) const [itemIndex, setItemIndex] = useState(-2) @@ -87,6 +89,7 @@ function FormFieldTabConditionalFormatting({ type="button" size="sm" title="Add" + disabled={!canUpdate} icon={} onClick={() => setItemIndex(-1)} /> @@ -121,6 +124,7 @@ function FormFieldTabConditionalFormatting({ type="button" size="sm" title="Delete" + disabled={!canUpdate} icon={} onClick={async (e) => { e.preventDefault() @@ -298,8 +302,17 @@ function FormFieldTabConditionalFormatting({ /> - diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabCssOptions.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabCssOptions.tsx index 0d502a05..6a06db95 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabCssOptions.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabCssOptions.tsx @@ -5,6 +5,7 @@ import { useLocalization } from '@/utils/hooks/useLocalization' import { Field, Form, Formik } from 'formik' import { object, string } from 'yup' import { FormFieldEditProps } from './FormFields' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ columnCssClass: string(), @@ -18,6 +19,7 @@ function FormFieldTabCssOptions({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() return ( @@ -61,8 +63,18 @@ function FormFieldTabCssOptions({ /> - diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabCustomization.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabCustomization.tsx index db8fcbbd..bbc410ba 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabCustomization.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabCustomization.tsx @@ -8,6 +8,7 @@ import { fixedPositionOptions } from '../options' import { FormFieldEditProps } from './FormFields' import { FixedPositionEnum } from '@/proxy/form/models' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ columnCustomizationDto: object() @@ -26,6 +27,7 @@ function FormFieldTabCustomization({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() return ( @@ -43,22 +45,28 @@ function FormFieldTabCustomization({ - + - + - diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabDetails.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabDetails.tsx index 7dd8f717..fc95ee26 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabDetails.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabDetails.tsx @@ -11,6 +11,7 @@ import { isValidJsonText } from '../json-row-operations/editor-options/jsonUtils import { FormFieldEditProps } from './FormFields' import { tooltipFormatListOptions } from '@/proxy/admin/list-form/options' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ fieldName: string().required().max(100), @@ -42,6 +43,7 @@ function FormFieldTabDetails({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() const [isEditorOptionsDialogOpen, setIsEditorOptionsDialogOpen] = useState(false) return ( @@ -171,6 +173,7 @@ function FormFieldTabDetails({ variant="solid" loading={isSubmitting} type="submit" + disabled={!canUpdate} > {isSubmitting ? translate('::App.Platform.Saving') : translate('::App.Platform.Save')} diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabFiltering.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabFiltering.tsx index 24124eed..b829ddfa 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabFiltering.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabFiltering.tsx @@ -5,6 +5,7 @@ import { useLocalization } from '@/utils/hooks/useLocalization' import { Field, Form, Formik } from 'formik' import { bool, object, string } from 'yup' import { FormFieldEditProps } from './FormFields' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ columnFilterDto: object() @@ -23,6 +24,7 @@ function FormFieldTabFiltering({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() return ( @@ -82,8 +84,18 @@ function FormFieldTabFiltering({ /> - diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabGrouping.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabGrouping.tsx index 51f39044..20dc19a5 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabGrouping.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabGrouping.tsx @@ -5,6 +5,7 @@ import { useLocalization } from '@/utils/hooks/useLocalization' import { Field, Form, Formik } from 'formik' import { bool, number, object } from 'yup' import { FormFieldEditProps } from './FormFields' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ columnGroupingDto: object() @@ -23,6 +24,7 @@ function FormFieldTabGrouping({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() return ( @@ -59,8 +61,18 @@ function FormFieldTabGrouping({ /> - diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabHeadering.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabHeadering.tsx index 50909e7f..a3d77ab8 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabHeadering.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabHeadering.tsx @@ -5,6 +5,7 @@ import { useLocalization } from '@/utils/hooks/useLocalization' import { Field, Form, Formik } from 'formik' import { bool, object, string } from 'yup' import { FormFieldEditProps } from './FormFields' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ columnHeaderDto: object() @@ -23,6 +24,7 @@ function FormFieldTabHeadering({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() return ( @@ -37,9 +39,7 @@ function FormFieldTabHeadering({ {({ touched, errors, isSubmitting }) => (
- + @@ -63,8 +63,18 @@ function FormFieldTabHeadering({ /> -
diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabJoinOptions.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabJoinOptions.tsx index 33d6b21a..0a916c51 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabJoinOptions.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabJoinOptions.tsx @@ -11,6 +11,7 @@ import { object, string } from 'yup' import { gridColumnJoinConditionOptions, gridColumnJoinTypeListOptions } from '../options' import { FormFieldEditProps } from './FormFields' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ columnJoinTableDto: object() @@ -35,6 +36,7 @@ function FormFieldTabJoinOptions({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() return ( @@ -202,7 +202,15 @@ function FormFieldTabJoinOptions({ - diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabLookup.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabLookup.tsx index 6f775523..2f4d9b90 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabLookup.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabLookup.tsx @@ -13,6 +13,7 @@ import { FormFieldEditProps } from './FormFields' import { ColumnCascadeFilterOperatorEnum, UiLookupDataSourceTypeEnum } from '@/proxy/form/models' import { buildLookupQuery } from '../../lookupQuery' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ lookupDto: object() @@ -254,6 +255,7 @@ function FormFieldTabLookup({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() const listFormValues = useStoreState((s) => s.admin.lists.values) const dsCode = listFormValues?.dataSourceCode ?? '' const [dbObjects, setDbObjects] = useState(null) @@ -377,9 +379,7 @@ function FormFieldTabLookup({ type="text" autoComplete="off" name="lookupDto.cascadeRelationField" - placeholder={translate( - '::App.ListFormFieldEdit.LookupCascadeRelationField', - )} + placeholder={translate('::App.ListFormFieldEdit.LookupCascadeRelationField')} component={Input} /> @@ -438,6 +438,7 @@ function FormFieldTabLookup({ variant="solid" loading={isSubmitting} type="submit" + disabled={!canUpdate} > {isSubmitting ? translate('::App.Platform.Saving') : translate('::App.Platform.Save')} diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabOptions.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabOptions.tsx index 9d917c6c..107b722c 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabOptions.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabOptions.tsx @@ -11,6 +11,7 @@ import { FaCode } from 'react-icons/fa' import { useState } from 'react' import EditorScriptBuilderDialog from '../json-row-operations/EditorScriptBuilderDialog' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ listOrderNo: number(), @@ -36,6 +37,7 @@ function FormFieldTabOptions({ fields: ColumnFormatEditDto[] } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() const [isEditorScriptDialogOpen, setIsEditorScriptDialogOpen] = useState(false) const editingFormGroupOptions: SelectBoxOption[] = [...editingFormGroups] .sort((left, right) => left.order - right.order) @@ -82,10 +84,7 @@ function FormFieldTabOptions({ invalid={errors.sortDirection && touched.sortDirection} errorMessage={errors.sortDirection} > - + {isSubmitting ? translate('::App.Platform.Saving') : translate('::App.Platform.Save')} diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabPermissions.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabPermissions.tsx index 16006fbd..76110859 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabPermissions.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabPermissions.tsx @@ -9,6 +9,7 @@ import { bool, object, string } from 'yup' import { FormFieldEditProps } from './FormFields' import { getPermissions } from '@/services/identity.service' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ permissionDto: object().shape({ @@ -28,6 +29,7 @@ function FormFieldTabPermissions({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() const [permissionOptions, setPermissionOptions] = useState([]) const fetchPermissions = async () => { @@ -73,10 +75,7 @@ function FormFieldTabPermissions({ invalid={errors.permissionDto?.r && touched.permissionDto?.r} errorMessage={errors.permissionDto?.r} > - + - diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabPivotSetting.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabPivotSetting.tsx index eaeea8cb..0ea48e64 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabPivotSetting.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabPivotSetting.tsx @@ -12,6 +12,7 @@ import { } from '../options' import { tooltipFormatListOptions } from '@/proxy/admin/list-form/options' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' const schema = object().shape({ pivotSettingsDto: object().shape({ @@ -35,6 +36,7 @@ function FormFieldTabPivotSetting({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() return ( - + - + - diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabSummary.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabSummary.tsx index 2a2461f0..d6533440 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabSummary.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabSummary.tsx @@ -9,6 +9,7 @@ import { FormFieldEditProps } from './FormFields' import { tooltipFormatListOptions } from '@/proxy/admin/list-form/options' import { SelectBoxOption } from '@/types/shared' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' /** * Grup özeti ve genel toplam sekmelerinin ortak gövdesi. @@ -44,6 +45,7 @@ function FormFieldTabSummary({ editTab: string } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() const fieldList: SelectBoxOption[] = fields.map((field) => ({ value: field.fieldName, @@ -64,51 +66,54 @@ function FormFieldTabSummary({ }} > {({ isSubmitting }) => ( -
- - - - + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + +
)}
diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabValidationRules.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabValidationRules.tsx index 9a05be35..c4f3759a 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabValidationRules.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabValidationRules.tsx @@ -35,6 +35,7 @@ import { ValidationRuleDto, } from '@/proxy/form/models' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' const NewItem: ValidationRuleDto = { type: ColumnValidationTypeListEnum.None, @@ -66,6 +67,7 @@ function FormFieldTabValidationRules({ initialValues: ColumnFormatEditDto } & FormFieldEditProps) { const { translate } = useLocalization() + const { canUpdate } = useFieldPermission() const [isLoading, setIsLoading] = useState(false) const [itemIndex, setItemIndex] = useState(-2) @@ -101,6 +103,7 @@ function FormFieldTabValidationRules({ type="button" size="sm" title="Add" + disabled={!canUpdate} icon={} onClick={() => setItemIndex(-1)} /> @@ -137,6 +140,7 @@ function FormFieldTabValidationRules({ type="button" size="sm" title="Delete" + disabled={!canUpdate} icon={} onClick={async (e) => { e.preventDefault() @@ -332,8 +336,11 @@ function FormFieldTabValidationRules({ variant="solid" loading={isLoading} type="submit" + disabled={!canUpdate} > - {isLoading ? translate('::App.Platform.Saving') : translate('::App.Platform.Save')} + {isLoading + ? translate('::App.Platform.Saving') + : translate('::App.Platform.Save')} diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFields.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFields.tsx index b5ce944c..ba95eb8e 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFields.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFields.tsx @@ -44,6 +44,7 @@ import { sqlObjectManagerService } from '@/services/sql-query-manager.service' import type { DatabaseColumnDto } from '@/proxy/sql-query-manager/models' import type { EditingFormDto } from '@/proxy/form/models' import SelectField from '../shared/SelectField' +import { useFieldPermission } from './useFieldPermission' export interface FormFieldEditProps { onSubmit: ( @@ -86,6 +87,7 @@ function FormFields({ columns: DatabaseColumnDto[] }) { const { translate } = useLocalization() + const { canCreate, canDelete } = useFieldPermission() const [fields, setFields] = useState() const [deleteRowId, setDeleteRowId] = useState(null) const [row, setRow] = useState(null) @@ -389,31 +391,35 @@ function FormFields({
- @@ -638,6 +655,7 @@ function FormFields({ Cancel
- diff --git a/ui/src/views/admin/listForm/edit/form-fields/useFieldPermission.ts b/ui/src/views/admin/listForm/edit/form-fields/useFieldPermission.ts new file mode 100644 index 00000000..c5e087fd --- /dev/null +++ b/ui/src/views/admin/listForm/edit/form-fields/useFieldPermission.ts @@ -0,0 +1,17 @@ +import { LISTFORM_FIELD_PERMISSION } from '@/constants/permission.constant' +import { usePermission } from '@/utils/hooks/usePermission' + +/** + * Fields ekranindaki butonlarin yetki sozlesmesi. Sunucu tarafinda ayni kodlar + * `ListFormFieldsAppService` policy adlari olarak zorunlu tutulur; burasi yalnizca + * kullaniciya calismayacak bir buton gostermemek icindir. + */ +export const useFieldPermission = () => { + const { checkPermission } = usePermission() + + return { + canCreate: checkPermission(LISTFORM_FIELD_PERMISSION.CREATE), + canUpdate: checkPermission(LISTFORM_FIELD_PERMISSION.UPDATE), + canDelete: checkPermission(LISTFORM_FIELD_PERMISSION.DELETE), + } +} diff --git a/ui/src/views/admin/listForm/wizard/Wizard.tsx b/ui/src/views/admin/listForm/wizard/Wizard.tsx index 572fa708..888c14d9 100644 --- a/ui/src/views/admin/listForm/wizard/Wizard.tsx +++ b/ui/src/views/admin/listForm/wizard/Wizard.tsx @@ -166,7 +166,7 @@ const initialValues: ListFormWizardDto = { permissionGroupDisplayNameEn: '', permissionGroupDisplayNameTr: '', menuParentCode: '', - menuParentShortName: '', + menuParentModuleId: '', menuParentIcon: '', menuIcon: '', dataSourceCode: '', @@ -735,7 +735,7 @@ const Wizard = () => { permissionGroupDisplayNameEn: w.permissionGroupDisplayNameEn ?? '', permissionGroupDisplayNameTr: w.permissionGroupDisplayNameTr ?? '', menuParentCode: w.menuParentCode ?? '', - menuParentShortName: w.menuParentShortName ?? '', + menuParentModuleId: w.menuParentModuleId ?? '', menuParentIcon: w.menuParentIcon ?? '', menuIcon: w.menuIcon ?? '', dataSourceCode: w.dataSourceCode ?? '', @@ -941,7 +941,7 @@ const Wizard = () => { group === findRootCode(rawMenuItems, parentCode).toLowerCase()) formik?.setFieldValue('menuParentCode', '') - formik?.setFieldValue('menuParentShortName', '') + formik?.setFieldValue('menuParentModuleId', '') formik?.setFieldValue('menuParentIcon', '') formik?.setFieldValue('languageTextMenuParentEn', '') formik?.setFieldValue('languageTextMenuParentTr', '') @@ -959,7 +959,7 @@ const Wizard = () => { handlePermissionGroupChange('') if ((formik?.values.menuParentCode ?? '').toLowerCase() === deleted) { formik?.setFieldValue('menuParentCode', '') - formik?.setFieldValue('menuParentShortName', '') + formik?.setFieldValue('menuParentModuleId', '') formik?.setFieldValue('menuParentIcon', '') formik?.setFieldValue('languageTextMenuParentEn', '') formik?.setFieldValue('languageTextMenuParentTr', '') @@ -975,7 +975,7 @@ const Wizard = () => { formik?.setFieldValue('createMenu', createMenu) if (createMenu) return formik?.setFieldValue('menuParentCode', '') - formik?.setFieldValue('menuParentShortName', '') + formik?.setFieldValue('menuParentModuleId', '') formik?.setFieldValue('menuParentIcon', '') formik?.setFieldValue('languageTextMenuParentEn', '') formik?.setFieldValue('languageTextMenuParentTr', '') @@ -999,12 +999,12 @@ const Wizard = () => { formikRef.current?.setFieldValue('languageTextMenuParentEn', selectedMenu?.menuTextEn ?? '') formikRef.current?.setFieldValue('languageTextMenuParentTr', selectedMenu?.menuTextTr ?? '') if (!code) { - formikRef.current?.setFieldValue('menuParentShortName', '') + formikRef.current?.setFieldValue('menuParentModuleId', '') return } const rootCode = findRootCode(rawMenuItems, code) const rootMenu = rawMenuItems.find((item) => item.code === rootCode) - formikRef.current?.setFieldValue('menuParentShortName', rootMenu?.shortName ?? '') + formikRef.current?.setFieldValue('menuParentModuleId', rootMenu?.moduleId ?? '') applyPermissionGroupFromRoot(rootCode) } @@ -1014,7 +1014,7 @@ const Wizard = () => { menuTextEn: string menuTextTr: string icon?: string - shortName?: string + moduleId?: string }) => { formikRef.current?.setFieldValue('menuParentCode', menu.code) const nextMenuOrder = @@ -1029,8 +1029,8 @@ const Wizard = () => { const rootCode = menu.parentCode ? findRootCode(rawMenuItems, menu.parentCode) : menu.code const existingRoot = rawMenuItems.find((item) => item.code === rootCode) formikRef.current?.setFieldValue( - 'menuParentShortName', - menu.parentCode ? (existingRoot?.shortName ?? '') : (menu.shortName ?? ''), + 'menuParentModuleId', + menu.parentCode ? (existingRoot?.moduleId ?? '') : (menu.moduleId ?? ''), ) // Yeni menu kok seviyedeyse izin grubu ondan turetilir; gorunen adlar da menunun // dialogda girilen TR/EN metinleridir (menu heniz listede olmadigi icin buradan gecilir). diff --git a/ui/src/views/admin/listForm/wizard/WizardStepMenu.tsx b/ui/src/views/admin/listForm/wizard/WizardStepMenu.tsx index fc2e8504..5ba8f466 100644 --- a/ui/src/views/admin/listForm/wizard/WizardStepMenu.tsx +++ b/ui/src/views/admin/listForm/wizard/WizardStepMenu.tsx @@ -451,7 +451,7 @@ export interface WizardStepMenuProps { menuTextEn: string menuTextTr: string icon?: string - shortName?: string + moduleId?: string }) => void | Promise onReloadMenu: () => void permissionGroupList: SelectBoxOption[] diff --git a/ui/src/views/admin/listForm/wizard/menuTree.ts b/ui/src/views/admin/listForm/wizard/menuTree.ts index 213ee6dc..40f36a0c 100644 --- a/ui/src/views/admin/listForm/wizard/menuTree.ts +++ b/ui/src/views/admin/listForm/wizard/menuTree.ts @@ -8,7 +8,7 @@ import { MenuItem } from '@/proxy/menus/menu' export interface MenuTreeNode { code: string displayName: string - shortName?: string + moduleId?: string icon?: string url?: string order?: number @@ -22,7 +22,7 @@ export function buildMenuTree(items: MenuItem[]): MenuTreeNode[] { map.set(item.code!, { code: item.code!, displayName: item.displayName ?? item.code!, - shortName: item.shortName ?? undefined, + moduleId: item.moduleId ?? undefined, icon: item.icon ?? undefined, url: item.url ?? undefined, order: item.order ?? undefined, diff --git a/ui/src/views/admin/role-management/RolesPermission.tsx b/ui/src/views/admin/role-management/RolesPermission.tsx index 110a2f90..35522061 100644 --- a/ui/src/views/admin/role-management/RolesPermission.tsx +++ b/ui/src/views/admin/role-management/RolesPermission.tsx @@ -232,8 +232,13 @@ function RolesPermission({ const response = await getPermissions(providerName, name) const data = response.data - const tenantGroup = tenant?.menuGroup?.trim() - if (!tenantGroup) { + // Kiracı birden fazla modüle sahip olabilir: "Sas|Adm" + const tenantModules = (tenant?.modules ?? '') + .split(MULTIVALUE_DELIMITER) + .map((module: string) => module.trim()) + .filter(Boolean) + + if (!tenantModules.length) { setPermissionList(data) return } @@ -241,12 +246,12 @@ function RolesPermission({ const filteredGroups = data.groups .map((group: any) => { const filteredPermissions = group.permissions.filter((perm: any) => { - if (!perm.menuGroup) return false - const groups = - typeof perm.menuGroup === 'string' - ? perm.menuGroup.split(MULTIVALUE_DELIMITER).map((g: string) => g.trim()) - : perm.menuGroup - return groups.includes(tenantGroup) + if (!perm.modules) return false + const permissionModules = + typeof perm.modules === 'string' + ? perm.modules.split(MULTIVALUE_DELIMITER).map((m: string) => m.trim()) + : perm.modules + return permissionModules.some((module: string) => tenantModules.includes(module)) }) return { ...group, permissions: filteredPermissions } diff --git a/ui/src/views/admin/tenant-management/CreateTenantFromOrderDialog.tsx b/ui/src/views/admin/tenant-management/CreateTenantFromOrderDialog.tsx index 4f0821ad..077c442e 100644 --- a/ui/src/views/admin/tenant-management/CreateTenantFromOrderDialog.tsx +++ b/ui/src/views/admin/tenant-management/CreateTenantFromOrderDialog.tsx @@ -8,7 +8,8 @@ import { Select, toast, } from '@/components/ui' -import { getMenuGroups } from '@/services/menu.service' +import { MULTIVALUE_DELIMITER } from '@/constants/app.constant' +import { getModules } from '@/services/menu.service' import { createTenantFromOrder } from '@/services/tenant.service' import { SelectBoxOption } from '@/types/shared' import { useLocalization } from '@/utils/hooks/useLocalization' @@ -18,7 +19,7 @@ import * as Yup from 'yup' type CreateTenantFromOrderValues = { name: string - menuGroup: string + modules: string[] } type CreateTenantFromOrderDialogProps = { @@ -29,7 +30,7 @@ type CreateTenantFromOrderDialogProps = { const schema = Yup.object().shape({ name: Yup.string().trim().required(), - menuGroup: Yup.string().trim().required(), + modules: Yup.array().of(Yup.string().trim()).min(1).required(), }) const CreateTenantFromOrderDialog = ({ @@ -38,35 +39,35 @@ const CreateTenantFromOrderDialog = ({ orderId, }: CreateTenantFromOrderDialogProps) => { const { translate } = useLocalization() - const [menuGroupOptions, setMenuGroupOptions] = useState([]) - const [isMenuGroupsLoading, setIsMenuGroupsLoading] = useState(false) + const [moduleOptions, setModuleOptions] = useState([]) + const [isModulesLoading, setIsModulesLoading] = useState(false) useEffect(() => { if (!open) { return } - const fetchMenuGroups = async () => { - setIsMenuGroupsLoading(true) + const fetchModules = async () => { + setIsModulesLoading(true) try { - const response = await getMenuGroups() + const response = await getModules() const items = response?.data ?? [] - setMenuGroupOptions( + setModuleOptions( items.map((item: any) => ({ value: String(item.key ?? item.Key ?? ''), label: String(item.name ?? item.Name ?? ''), })), ) } catch { - setMenuGroupOptions([]) + setModuleOptions([]) } finally { - setIsMenuGroupsLoading(false) + setIsModulesLoading(false) } } - fetchMenuGroups() + fetchModules() }, [open]) const handleSubmit = async ( @@ -79,7 +80,7 @@ const CreateTenantFromOrderDialog = ({ await createTenantFromOrder({ orderId, name: values.name.trim(), - menuGroup: values.menuGroup.trim(), + modules: values.modules.join(MULTIVALUE_DELIMITER), }) toast.push( @@ -115,7 +116,7 @@ const CreateTenantFromOrderDialog = ({ initialValues={{ name: '', - menuGroup: 'Erp', + modules: [], }} validationSchema={schema} onSubmit={handleSubmit} @@ -124,20 +125,28 @@ const CreateTenantFromOrderDialog = ({
- - {({ field, form }: FieldProps) => ( + + {({ field, form }: FieldProps) => ( setForm((p) => ({ ...p, shortName: e.target.value }))} - placeholder="Sas, Finance, Hr…" - className={`${fieldCls}`} - /> - {shortNameRequired && ( -

{translate('::App.Platform.MenuCodeHint')}

+ {isRootMenu ? ( + // Listede olmayan bir kod yazılabilir; kaydedildiğinde yeni modül olarak tanımlanır. + )} @@ -529,7 +578,7 @@ export function MenuAddDialog({ !form.menuTextEn.trim() || !form.menuTextTr.trim() || !form.icon.trim() || - (shortNameRequired && !form.shortName.trim()) + (isRootMenu && !form.moduleId.trim()) } onClick={handleSave} >