fix #2978 - allow host users and admins to have personalized pages

This commit is contained in:
sbwalker 2023-07-10 16:13:56 -04:00
parent 62ad99d0b6
commit 3891dea009
4 changed files with 66 additions and 52 deletions

View File

@ -471,6 +471,12 @@
private async Task ToggleEditMode(bool EditMode) private async Task ToggleEditMode(bool EditMode)
{ {
Page page = null;
if (PageState.Page.IsPersonalizable && PageState.User != null && UserSecurity.IsAuthorized(PageState.User, RoleNames.Registered))
{
page = await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId);
}
if (_showEditMode) if (_showEditMode)
{ {
if (EditMode) if (EditMode)
@ -490,9 +496,8 @@
} }
else else
{ {
if (PageState.Page.IsPersonalizable && PageState.User != null) if (PageState.Page.IsPersonalizable && PageState.User != null && UserSecurity.IsAuthorized(PageState.User, RoleNames.Registered))
{ {
var page = await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId);
PageState.EditMode = true; PageState.EditMode = true;
NavigationManager.NavigateTo(NavigateUrl(page.Path, "edit=" + ((PageState.EditMode) ? "true" : "false"))); NavigationManager.NavigateTo(NavigateUrl(page.Path, "edit=" + ((PageState.EditMode) ? "true" : "false")));
} }

View File

@ -223,12 +223,12 @@
} }
if (page == null) if (page == null)
{ {
// look for personalized page
page = await PageService.GetPageAsync(route.PagePath, site.SiteId); page = await PageService.GetPageAsync(route.PagePath, site.SiteId);
} }
else else
{ {
if (user != null && page.IsPersonalizable) // look for personalized page
if (user != null && page.IsPersonalizable && !UserSecurity.IsAuthorized(user, PermissionNames.Edit, page.PermissionList))
{ {
var personalized = await PageService.GetPageAsync(route.PagePath + "/" + user.Username, site.SiteId); var personalized = await PageService.GetPageAsync(route.PagePath + "/" + user.Username, site.SiteId);
if (personalized != null) if (personalized != null)

View File

@ -9,6 +9,7 @@ using System.Net;
using Oqtane.Enums; using Oqtane.Enums;
using Oqtane.Infrastructure; using Oqtane.Infrastructure;
using Oqtane.Repository; using Oqtane.Repository;
using System.IO;
namespace Oqtane.Controllers namespace Oqtane.Controllers
{ {
@ -176,12 +177,15 @@ namespace Oqtane.Controllers
Page parent = _pages.GetPage(id); Page parent = _pages.GetPage(id);
User user = _userPermissions.GetUser(User); User user = _userPermissions.GetUser(User);
if (parent != null && parent.SiteId == _alias.SiteId && parent.IsPersonalizable && user.UserId == int.Parse(userid)) if (parent != null && parent.SiteId == _alias.SiteId && parent.IsPersonalizable && user.UserId == int.Parse(userid))
{
page = _pages.GetPage(parent.Path + "/" + user.Username, parent.SiteId);
if (page == null)
{ {
page = new Page(); page = new Page();
page.SiteId = parent.SiteId; page.SiteId = parent.SiteId;
page.ParentId = parent.PageId; page.ParentId = parent.PageId;
page.Name = user.Username; page.Name = (!string.IsNullOrEmpty(user.DisplayName)) ? user.DisplayName : user.Username;
page.Path = parent.Path + "/" + page.Name; page.Path = parent.Path + "/" + user.Username;
page.Title = page.Name + " - " + parent.Name; page.Title = page.Name + " - " + parent.Name;
page.Order = 0; page.Order = 0;
page.IsNavigation = false; page.IsNavigation = false;
@ -236,6 +240,7 @@ namespace Oqtane.Controllers
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Page, page.PageId, SyncEventActions.Create); _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Page, page.PageId, SyncEventActions.Create);
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, page.SiteId, SyncEventActions.Refresh); _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, page.SiteId, SyncEventActions.Refresh);
} }
}
else else
{ {
_logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized Page Post Attempt {PageId} By User {UserId}", id, userid); _logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized Page Post Attempt {PageId} By User {UserId}", id, userid);

View File

@ -648,10 +648,14 @@ namespace Oqtane.Controllers
foreach (UserRole userrole in userroles) foreach (UserRole userrole in userroles)
{ {
roles += userrole.Role.Name + ";"; roles += userrole.Role.Name + ";";
if (userrole.Role.Name == RoleNames.Host && userroles.Where(item => item.Role.Name == RoleNames.Admin).FirstOrDefault() == null) if (userrole.Role.Name == RoleNames.Host && !userroles.Any(item => item.Role.Name == RoleNames.Admin))
{ {
roles += RoleNames.Admin + ";"; roles += RoleNames.Admin + ";";
} }
if (userrole.Role.Name == RoleNames.Host && !userroles.Any(item => item.Role.Name == RoleNames.Registered))
{
roles += RoleNames.Registered + ";";
}
} }
if (roles != "") roles = ";" + roles; if (roles != "") roles = ";" + roles;
return roles; return roles;