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 @@
-
@@ -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
///