fix #2978 - allow host users and admins to have personalized pages
This commit is contained in:
parent
62ad99d0b6
commit
3891dea009
|
@ -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")));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -177,64 +178,68 @@ namespace Oqtane.Controllers
|
||||||
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 = new Page();
|
page = _pages.GetPage(parent.Path + "/" + user.Username, parent.SiteId);
|
||||||
page.SiteId = parent.SiteId;
|
if (page == null)
|
||||||
page.ParentId = parent.PageId;
|
|
||||||
page.Name = user.Username;
|
|
||||||
page.Path = parent.Path + "/" + page.Name;
|
|
||||||
page.Title = page.Name + " - " + parent.Name;
|
|
||||||
page.Order = 0;
|
|
||||||
page.IsNavigation = false;
|
|
||||||
page.Url = "";
|
|
||||||
page.ThemeType = parent.ThemeType;
|
|
||||||
page.DefaultContainerType = parent.DefaultContainerType;
|
|
||||||
page.Icon = parent.Icon;
|
|
||||||
page.PermissionList = new List<Permission>()
|
|
||||||
{
|
{
|
||||||
new Permission(PermissionNames.View, int.Parse(userid), true),
|
page = new Page();
|
||||||
new Permission(PermissionNames.View, RoleNames.Everyone, true),
|
page.SiteId = parent.SiteId;
|
||||||
new Permission(PermissionNames.Edit, int.Parse(userid), true)
|
page.ParentId = parent.PageId;
|
||||||
};
|
page.Name = (!string.IsNullOrEmpty(user.DisplayName)) ? user.DisplayName : user.Username;
|
||||||
page.IsPersonalizable = false;
|
page.Path = parent.Path + "/" + user.Username;
|
||||||
page.UserId = int.Parse(userid);
|
page.Title = page.Name + " - " + parent.Name;
|
||||||
page = _pages.AddPage(page);
|
page.Order = 0;
|
||||||
|
page.IsNavigation = false;
|
||||||
// copy modules
|
page.Url = "";
|
||||||
List<PageModule> pagemodules = _pageModules.GetPageModules(page.SiteId).ToList();
|
page.ThemeType = parent.ThemeType;
|
||||||
foreach (PageModule pm in pagemodules.Where(item => item.PageId == parent.PageId && !item.IsDeleted))
|
page.DefaultContainerType = parent.DefaultContainerType;
|
||||||
{
|
page.Icon = parent.Icon;
|
||||||
Module module = new Module();
|
page.PermissionList = new List<Permission>()
|
||||||
module.SiteId = page.SiteId;
|
|
||||||
module.PageId = page.PageId;
|
|
||||||
module.ModuleDefinitionName = pm.Module.ModuleDefinitionName;
|
|
||||||
module.AllPages = false;
|
|
||||||
module.PermissionList = new List<Permission>()
|
|
||||||
{
|
{
|
||||||
new Permission(PermissionNames.View, int.Parse(userid), true),
|
new Permission(PermissionNames.View, int.Parse(userid), true),
|
||||||
new Permission(PermissionNames.View, RoleNames.Everyone, true),
|
new Permission(PermissionNames.View, RoleNames.Everyone, true),
|
||||||
new Permission(PermissionNames.Edit, int.Parse(userid), true)
|
new Permission(PermissionNames.Edit, int.Parse(userid), true)
|
||||||
};
|
};
|
||||||
module = _modules.AddModule(module);
|
page.IsPersonalizable = false;
|
||||||
|
page.UserId = int.Parse(userid);
|
||||||
|
page = _pages.AddPage(page);
|
||||||
|
|
||||||
string content = _modules.ExportModule(pm.ModuleId);
|
// copy modules
|
||||||
if (content != "")
|
List<PageModule> pagemodules = _pageModules.GetPageModules(page.SiteId).ToList();
|
||||||
|
foreach (PageModule pm in pagemodules.Where(item => item.PageId == parent.PageId && !item.IsDeleted))
|
||||||
{
|
{
|
||||||
_modules.ImportModule(module.ModuleId, content);
|
Module module = new Module();
|
||||||
|
module.SiteId = page.SiteId;
|
||||||
|
module.PageId = page.PageId;
|
||||||
|
module.ModuleDefinitionName = pm.Module.ModuleDefinitionName;
|
||||||
|
module.AllPages = false;
|
||||||
|
module.PermissionList = new List<Permission>()
|
||||||
|
{
|
||||||
|
new Permission(PermissionNames.View, int.Parse(userid), true),
|
||||||
|
new Permission(PermissionNames.View, RoleNames.Everyone, true),
|
||||||
|
new Permission(PermissionNames.Edit, int.Parse(userid), true)
|
||||||
|
};
|
||||||
|
module = _modules.AddModule(module);
|
||||||
|
|
||||||
|
string content = _modules.ExportModule(pm.ModuleId);
|
||||||
|
if (content != "")
|
||||||
|
{
|
||||||
|
_modules.ImportModule(module.ModuleId, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
PageModule pagemodule = new PageModule();
|
||||||
|
pagemodule.PageId = page.PageId;
|
||||||
|
pagemodule.ModuleId = module.ModuleId;
|
||||||
|
pagemodule.Title = pm.Title;
|
||||||
|
pagemodule.Pane = pm.Pane;
|
||||||
|
pagemodule.Order = pm.Order;
|
||||||
|
pagemodule.ContainerType = pm.ContainerType;
|
||||||
|
|
||||||
|
_pageModules.AddPageModule(pagemodule);
|
||||||
}
|
}
|
||||||
|
|
||||||
PageModule pagemodule = new PageModule();
|
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Page, page.PageId, SyncEventActions.Create);
|
||||||
pagemodule.PageId = page.PageId;
|
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, page.SiteId, SyncEventActions.Refresh);
|
||||||
pagemodule.ModuleId = module.ModuleId;
|
|
||||||
pagemodule.Title = pm.Title;
|
|
||||||
pagemodule.Pane = pm.Pane;
|
|
||||||
pagemodule.Order = pm.Order;
|
|
||||||
pagemodule.ContainerType = pm.ContainerType;
|
|
||||||
|
|
||||||
_pageModules.AddPageModule(pagemodule);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Page, page.PageId, SyncEventActions.Create);
|
|
||||||
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, page.SiteId, SyncEventActions.Refresh);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user