From a0f41341acd9335e000cb0654a6acb12118dd64e Mon Sep 17 00:00:00 2001 From: sbwalker Date: Tue, 13 May 2025 15:49:16 -0400 Subject: [PATCH] fix #5398 - editing page permissions --- Oqtane.Client/Modules/Admin/Pages/Edit.razor | 57 +++++++++++++------ Oqtane.Client/Modules/Admin/Users/Edit.razor | 2 +- .../Resources/Modules/Admin/Pages/Edit.resx | 6 ++ Oqtane.Server/Controllers/PageController.cs | 53 +++++++++-------- Oqtane.Shared/Models/Page.cs | 6 ++ 5 files changed, 82 insertions(+), 42 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor index 6d27b990..df9db9bb 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -30,16 +30,16 @@
- + + @foreach (Page page in _pages) + { + if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, page.PermissionList) && page.PageId != _pageId) { - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, page.PermissionList) && page.PageId != _pageId) - { - - } + } - + } +
@@ -217,6 +217,9 @@

+ + +

@@ -225,15 +228,28 @@
+

+
+ +
+ +
+
+
+ +
-   -   - @Localizer["ModuleTitle"] - @Localizer["ModuleDefinition"] +   +   + @Localizer["ModuleTitle"] + @Localizer["ModuleDefinition"]
@@ -247,8 +263,10 @@ { @_themeSettingsComponent +
+ +
-
} } @@ -299,19 +317,21 @@ +
+ +
@if (_themeSettingsType != null) { @_themeSettingsComponent +
+ +
-
} } -
- - } @@ -348,6 +368,7 @@ private string _bodycontent; private List _permissions = null; private PermissionGrid _permissionGrid; + private string _updatemodulepermissions; private List _pageModules; private string _createdby; private DateTime _createdon; @@ -436,6 +457,7 @@ // permissions _permissions = _page.PermissionList; + _updatemodulepermissions = "True"; // page modules var modules = await ModuleService.GetModulesAsync(PageState.Site.SiteId); @@ -651,6 +673,7 @@ if (_page.UserId == null) { _page.PermissionList = _permissionGrid.GetPermissionList(); + _page.UpdateModulePermissions = bool.Parse(_updatemodulepermissions); } _page = await PageService.UpdatePageAsync(_page); diff --git a/Oqtane.Client/Modules/Admin/Users/Edit.razor b/Oqtane.Client/Modules/Admin/Users/Edit.razor index ae66baef..549059e4 100644 --- a/Oqtane.Client/Modules/Admin/Users/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Users/Edit.razor @@ -141,7 +141,7 @@ - +
@SharedLocalizer["Cancel"] @if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin) && PageState.Runtime != Shared.Runtime.Hybrid && !_ishost) diff --git a/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx index cf720e19..ded50502 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx @@ -303,4 +303,10 @@ Provide a url path for your personalized page. Please note that spaces and punctuation will be replaced by a dash. + + Update Module Permissions? + + + Specify if changes made to page permissions should be propagated to the modules on this page + \ No newline at end of file diff --git a/Oqtane.Server/Controllers/PageController.cs b/Oqtane.Server/Controllers/PageController.cs index f8ad1925..ee2ff20c 100644 --- a/Oqtane.Server/Controllers/PageController.cs +++ b/Oqtane.Server/Controllers/PageController.cs @@ -295,38 +295,43 @@ namespace Oqtane.Controllers var removed = GetPermissionsDifferences(currentPermissions, page.PermissionList); // synchronize module permissions - if (added.Count > 0 || removed.Count > 0) + if (page.UpdateModulePermissions && (added.Count > 0 || removed.Count > 0)) { - foreach (PageModule pageModule in _pageModules.GetPageModules(page.SiteId).Where(item => item.PageId == page.PageId).ToList()) + var pageModules = _pageModules.GetPageModules(page.SiteId); + foreach (PageModule pageModule in pageModules.Where(item => item.PageId == page.PageId).ToList()) { - var modulePermissions = _permissionRepository.GetPermissions(pageModule.Module.SiteId, EntityNames.Module, pageModule.Module.ModuleId).ToList(); - // permissions added - foreach (Permission permission in added) + // ignore "shared" modules + if (!pageModules.Any(item => item.ModuleId == pageModule.ModuleId && item.PageId != pageModule.PageId)) { - if (!modulePermissions.Any(item => item.PermissionName == permission.PermissionName - && item.RoleId == permission.RoleId && item.UserId == permission.UserId && item.IsAuthorized == permission.IsAuthorized)) + var modulePermissions = _permissionRepository.GetPermissions(pageModule.Module.SiteId, EntityNames.Module, pageModule.Module.ModuleId).ToList(); + // permissions added + foreach (Permission permission in added) { - _permissionRepository.AddPermission(new Permission + if (!modulePermissions.Any(item => item.PermissionName == permission.PermissionName + && item.RoleId == permission.RoleId && item.UserId == permission.UserId && item.IsAuthorized == permission.IsAuthorized)) { - SiteId = page.SiteId, - EntityName = EntityNames.Module, - EntityId = pageModule.ModuleId, - PermissionName = permission.PermissionName, - RoleId = permission.RoleId, - UserId = permission.UserId, - IsAuthorized = permission.IsAuthorized - }); + _permissionRepository.AddPermission(new Permission + { + SiteId = page.SiteId, + EntityName = EntityNames.Module, + EntityId = pageModule.ModuleId, + PermissionName = permission.PermissionName, + RoleId = permission.RoleId, + UserId = permission.UserId, + IsAuthorized = permission.IsAuthorized + }); + } } - } - // permissions removed - foreach (Permission permission in removed) - { - var modulePermission = modulePermissions.FirstOrDefault(item => item.PermissionName == permission.PermissionName - && item.RoleId == permission.RoleId && item.UserId == permission.UserId && item.IsAuthorized == permission.IsAuthorized); - if (modulePermission != null) + // permissions removed + foreach (Permission permission in removed) { - _permissionRepository.DeletePermission(modulePermission.PermissionId); + var modulePermission = modulePermissions.FirstOrDefault(item => item.PermissionName == permission.PermissionName + && item.RoleId == permission.RoleId && item.UserId == permission.UserId && item.IsAuthorized == permission.IsAuthorized); + if (modulePermission != null) + { + _permissionRepository.DeletePermission(modulePermission.PermissionId); + } } } } diff --git a/Oqtane.Shared/Models/Page.cs b/Oqtane.Shared/Models/Page.cs index bec0347e..15d640fe 100644 --- a/Oqtane.Shared/Models/Page.cs +++ b/Oqtane.Shared/Models/Page.cs @@ -122,6 +122,12 @@ namespace Oqtane.Models [NotMapped] public bool HasChildren { get; set; } + /// + /// Indicates if module permissions should be updated to be consistent with page permissions + /// + [NotMapped] + public bool UpdateModulePermissions { get; set; } + /// /// List of permissions for this page ///