diff --git a/Oqtane.Client/Services/Interfaces/IPageService.cs b/Oqtane.Client/Services/Interfaces/IPageService.cs
index 9981f373..2f5c4c6d 100644
--- a/Oqtane.Client/Services/Interfaces/IPageService.cs
+++ b/Oqtane.Client/Services/Interfaces/IPageService.cs
@@ -23,14 +23,6 @@ namespace Oqtane.Services
///
Task GetPageAsync(int pageId);
- ///
- /// Returns a specific page personalized for the given user
- ///
- ///
- ///
- ///
- Task GetPageAsync(int pageId, int userId);
-
///
/// Returns a specific page by its defined path
///
diff --git a/Oqtane.Client/Services/PageService.cs b/Oqtane.Client/Services/PageService.cs
index 0725ccf8..934b156e 100644
--- a/Oqtane.Client/Services/PageService.cs
+++ b/Oqtane.Client/Services/PageService.cs
@@ -25,11 +25,6 @@ namespace Oqtane.Services
return await GetJsonAsync($"{Apiurl}/{pageId}");
}
- public async Task GetPageAsync(int pageId, int userId)
- {
- return await GetJsonAsync($"{Apiurl}/{pageId}?userid={userId}");
- }
-
public async Task GetPageAsync(string path, int siteId)
{
try
diff --git a/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor b/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor
index 93e26b13..af681625 100644
--- a/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor
+++ b/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor
@@ -489,9 +489,9 @@
{
if (PageState.Page.IsPersonalizable && PageState.User != null)
{
- await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId);
+ var page = await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId);
PageState.EditMode = true;
- NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "true" : "false")));
+ NavigationManager.NavigateTo(NavigateUrl(page.Path, "edit=" + ((PageState.EditMode) ? "true" : "false")));
}
}
}
diff --git a/Oqtane.Client/UI/SiteRouter.razor b/Oqtane.Client/UI/SiteRouter.razor
index 380ce244..5406a11d 100644
--- a/Oqtane.Client/UI/SiteRouter.razor
+++ b/Oqtane.Client/UI/SiteRouter.razor
@@ -221,6 +221,23 @@
page = site.Pages.FirstOrDefault();
}
}
+ if (page == null)
+ {
+ // look for personalized page
+ page = await PageService.GetPageAsync(route.PagePath, site.SiteId);
+ }
+ else
+ {
+ if (user != null && page.IsPersonalizable)
+ {
+ page = await PageService.GetPageAsync(route.PagePath + "/" + user.Username, site.SiteId);
+ if (page != null)
+ {
+ // redirect to the personalized page
+ NavigationManager.NavigateTo(Utilities.NavigateUrl(SiteState.Alias.Path, route.PagePath + "/" + user.Username, ""), false);
+ }
+ }
+ }
if (page != null)
{
@@ -228,7 +245,7 @@
if (UserSecurity.IsAuthorized(user, PermissionNames.View, page.PermissionList))
{
// load additional metadata for current page
- page = await ProcessPage(page, site, user, SiteState.Alias);
+ page = ProcessPage(page, site, user, SiteState.Alias);
// load additional metadata for modules
(page, site.Modules) = ProcessModules(page, site.Modules, moduleid, action, (!string.IsNullOrEmpty(page.DefaultContainerType)) ? page.DefaultContainerType : site.DefaultContainerType, SiteState.Alias);
@@ -297,16 +314,10 @@
}
}
- private async Task ProcessPage(Page page, Site site, User user, Alias alias)
+ private Page ProcessPage(Page page, Site site, User user, Alias alias)
{
try
{
- if (page.IsPersonalizable && user != null)
- {
- // load the personalized page
- page = await PageService.GetPageAsync(page.PageId, user.UserId);
- }
-
if (string.IsNullOrEmpty(page.ThemeType))
{
page.ThemeType = site.DefaultThemeType;
diff --git a/Oqtane.Server/Controllers/PageController.cs b/Oqtane.Server/Controllers/PageController.cs
index d4cc1931..f4a9c62d 100644
--- a/Oqtane.Server/Controllers/PageController.cs
+++ b/Oqtane.Server/Controllers/PageController.cs
@@ -73,34 +73,6 @@ namespace Oqtane.Controllers
return pages;
}
- // GET api//5?userid=x
- [HttpGet("{id}")]
- public Page Get(int id, string userid)
- {
- Page page = null;
- if (string.IsNullOrEmpty(userid))
- {
- page = _pages.GetPage(id);
- }
- else
- {
- page = _pages.GetPage(id, int.Parse(userid));
- }
- if (page != null && page.SiteId == _alias.SiteId && _userPermissions.IsAuthorized(User, PermissionNames.View, page.PermissionList))
- {
- page.Settings = _settings.GetSettings(EntityNames.Page, page.PageId)
- .Where(item => !item.IsPrivate || _userPermissions.IsAuthorized(User, PermissionNames.Edit, page.PermissionList))
- .ToDictionary(setting => setting.SettingName, setting => setting.SettingValue);
- return page;
- }
- else
- {
- _logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized Page Get Attempt {PageId} {UserId}", id, userid);
- HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
- return null;
- }
- }
-
// GET api//path/x?path=y
[HttpGet("path/{siteid}")]
public Page Get(string path, int siteid)
@@ -180,29 +152,30 @@ namespace Oqtane.Controllers
{
Page page = null;
Page parent = _pages.GetPage(id);
- if (parent != null && parent.SiteId == _alias.SiteId && parent.IsPersonalizable && _userPermissions.GetUser(User).UserId == int.Parse(userid))
+ User user = _userPermissions.GetUser(User);
+ if (parent != null && parent.SiteId == _alias.SiteId && parent.IsPersonalizable && user.UserId == int.Parse(userid))
{
page = new Page();
page.SiteId = parent.SiteId;
- page.Name = parent.Name;
- page.Title = parent.Title;
- page.Path = parent.Path;
page.ParentId = parent.PageId;
+ page.Name = user.Username;
+ page.Path = parent.Path + "/" + page.Name;
+ page.Title = parent.Name + " - " + page.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 {
+ page.PermissionList = new List()
+ {
new Permission(PermissionNames.View, int.Parse(userid), true),
+ new Permission(PermissionNames.View, RoleNames.Everyone, true),
new Permission(PermissionNames.Edit, int.Parse(userid), true)
};
page.IsPersonalizable = false;
page.UserId = int.Parse(userid);
page = _pages.AddPage(page);
- _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Page, page.PageId, SyncEventActions.Create);
- _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, page.SiteId, SyncEventActions.Refresh);
// copy modules
List pagemodules = _pageModules.GetPageModules(page.SiteId).ToList();
@@ -213,8 +186,10 @@ namespace Oqtane.Controllers
module.PageId = page.PageId;
module.ModuleDefinitionName = pm.Module.ModuleDefinitionName;
module.AllPages = false;
- module.PermissionList = new List {
+ module.PermissionList = new List()
+ {
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);
@@ -235,6 +210,9 @@ namespace Oqtane.Controllers
_pageModules.AddPageModule(pagemodule);
}
+
+ _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Page, page.PageId, SyncEventActions.Create);
+ _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, page.SiteId, SyncEventActions.Refresh);
}
else
{
diff --git a/Oqtane.Server/Repository/Interfaces/IPageRepository.cs b/Oqtane.Server/Repository/Interfaces/IPageRepository.cs
index 98ce2ef3..12caca4c 100644
--- a/Oqtane.Server/Repository/Interfaces/IPageRepository.cs
+++ b/Oqtane.Server/Repository/Interfaces/IPageRepository.cs
@@ -10,7 +10,6 @@ namespace Oqtane.Repository
Page UpdatePage(Page page);
Page GetPage(int pageId);
Page GetPage(int pageId, bool tracking);
- Page GetPage(int pageId, int userId);
Page GetPage(string path, int siteId);
void DeletePage(int pageId);
}
diff --git a/Oqtane.Server/Repository/PageRepository.cs b/Oqtane.Server/Repository/PageRepository.cs
index 95032fc9..e3e50200 100644
--- a/Oqtane.Server/Repository/PageRepository.cs
+++ b/Oqtane.Server/Repository/PageRepository.cs
@@ -71,21 +71,6 @@ namespace Oqtane.Repository
return page;
}
- public Page GetPage(int pageId, int userId)
- {
- Page page = _db.Page.Find(pageId);
- if (page != null)
- {
- Page personalized = _db.Page.FirstOrDefault(item => item.SiteId == page.SiteId && item.Path == page.Path && item.UserId == userId);
- if (personalized != null)
- {
- page = personalized;
- }
- page.PermissionList = _permissions.GetPermissions(page.SiteId, EntityNames.Page, page.PageId)?.ToList();
- }
- return page;
- }
-
public Page GetPage(string path, int siteId)
{
Page page = _db.Page.FirstOrDefault(item => item.Path == path && item.SiteId == siteId);