create url mapping when page path changes
This commit is contained in:
parent
318d6afb0e
commit
1e1aaaccca
|
@ -1,5 +1,6 @@
|
||||||
@namespace Oqtane.Modules.Admin.UrlMappings
|
@namespace Oqtane.Modules.Admin.UrlMappings
|
||||||
@inherits ModuleBase
|
@inherits ModuleBase
|
||||||
|
@inject NavigationManager NavigationManager
|
||||||
@inject IUrlMappingService UrlMappingService
|
@inject IUrlMappingService UrlMappingService
|
||||||
@inject ISiteService SiteService
|
@inject ISiteService SiteService
|
||||||
@inject IStringLocalizer<Index> Localizer
|
@inject IStringLocalizer<Index> Localizer
|
||||||
|
@ -39,10 +40,10 @@ else
|
||||||
<td><ActionLink Action="Edit" Parameters="@($"id=" + context.UrlMappingId.ToString())" ResourceKey="Edit" /></td>
|
<td><ActionLink Action="Edit" Parameters="@($"id=" + context.UrlMappingId.ToString())" ResourceKey="Edit" /></td>
|
||||||
<td><ActionDialog Header="Delete Url Mapping" Message="@string.Format(Localizer["Confirm.DeleteUrlMapping"], context.Url)" Action="Delete" Security="SecurityAccessLevel.Admin" Class="btn btn-danger" OnClick="@(async () => await DeleteUrlMapping(context))" ResourceKey="DeleteUrlMapping" /></td>
|
<td><ActionDialog Header="Delete Url Mapping" Message="@string.Format(Localizer["Confirm.DeleteUrlMapping"], context.Url)" Action="Delete" Security="SecurityAccessLevel.Admin" Class="btn btn-danger" OnClick="@(async () => await DeleteUrlMapping(context))" ResourceKey="DeleteUrlMapping" /></td>
|
||||||
<td>
|
<td>
|
||||||
@context.Url
|
<a href="" onclick="@(() => BrowseUrl(context.Url))">@context.Url</a>
|
||||||
@if (_mapped)
|
@if (_mapped)
|
||||||
{
|
{
|
||||||
@((MarkupString)"<br />>> ")@context.MappedUrl
|
@((MarkupString)"<br />>> ")<a href="" onclick="@(() => BrowseUrl(context.MappedUrl))">@context.MappedUrl</a>
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>@context.Requests</td>
|
<td>@context.Requests</td>
|
||||||
|
@ -95,6 +96,11 @@ else
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void BrowseUrl(string url)
|
||||||
|
{
|
||||||
|
NavigationManager.NavigateTo(url, true);
|
||||||
|
}
|
||||||
|
|
||||||
private async Task DeleteUrlMapping(UrlMapping urlMapping)
|
private async Task DeleteUrlMapping(UrlMapping urlMapping)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
|
@ -22,11 +22,12 @@ namespace Oqtane.Controllers
|
||||||
private readonly IPermissionRepository _permissionRepository;
|
private readonly IPermissionRepository _permissionRepository;
|
||||||
private readonly ISettingRepository _settings;
|
private readonly ISettingRepository _settings;
|
||||||
private readonly IUserPermissions _userPermissions;
|
private readonly IUserPermissions _userPermissions;
|
||||||
|
private readonly IUrlMappingRepository _urlMappings;
|
||||||
private readonly ISyncManager _syncManager;
|
private readonly ISyncManager _syncManager;
|
||||||
private readonly ILogManager _logger;
|
private readonly ILogManager _logger;
|
||||||
private readonly Alias _alias;
|
private readonly Alias _alias;
|
||||||
|
|
||||||
public PageController(IPageRepository pages, IModuleRepository modules, IPageModuleRepository pageModules, IPermissionRepository permissionRepository, ISettingRepository settings, IUserPermissions userPermissions, ITenantManager tenantManager, ISyncManager syncManager, ILogManager logger)
|
public PageController(IPageRepository pages, IModuleRepository modules, IPageModuleRepository pageModules, IPermissionRepository permissionRepository, ISettingRepository settings, IUserPermissions userPermissions, IUrlMappingRepository urlMappings, ITenantManager tenantManager, ISyncManager syncManager, ILogManager logger)
|
||||||
{
|
{
|
||||||
_pages = pages;
|
_pages = pages;
|
||||||
_modules = modules;
|
_modules = modules;
|
||||||
|
@ -34,6 +35,7 @@ namespace Oqtane.Controllers
|
||||||
_permissionRepository = permissionRepository;
|
_permissionRepository = permissionRepository;
|
||||||
_settings = settings;
|
_settings = settings;
|
||||||
_userPermissions = userPermissions;
|
_userPermissions = userPermissions;
|
||||||
|
_urlMappings = urlMappings;
|
||||||
_syncManager = syncManager;
|
_syncManager = syncManager;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_alias = tenantManager.GetAlias();
|
_alias = tenantManager.GetAlias();
|
||||||
|
@ -252,17 +254,34 @@ namespace Oqtane.Controllers
|
||||||
[Authorize(Roles = RoleNames.Registered)]
|
[Authorize(Roles = RoleNames.Registered)]
|
||||||
public Page Put(int id, [FromBody] Page page)
|
public Page Put(int id, [FromBody] Page page)
|
||||||
{
|
{
|
||||||
if (ModelState.IsValid && page.SiteId == _alias.SiteId && _pages.GetPage(page.PageId, false) != null && _userPermissions.IsAuthorized(User, EntityNames.Page, page.PageId, PermissionNames.Edit))
|
// get current page
|
||||||
|
var currentPage = _pages.GetPage(page.PageId, false);
|
||||||
|
|
||||||
|
if (ModelState.IsValid && page.SiteId == _alias.SiteId && currentPage != null && _userPermissions.IsAuthorized(User, EntityNames.Page, page.PageId, PermissionNames.Edit))
|
||||||
{
|
{
|
||||||
// preserve page permissions
|
// get current page permissions
|
||||||
var oldPermissions = _permissionRepository.GetPermissions(EntityNames.Page, page.PageId).ToList();
|
var currentPermissions = _permissionRepository.GetPermissions(EntityNames.Page, page.PageId).ToList();
|
||||||
|
|
||||||
page = _pages.UpdatePage(page);
|
page = _pages.UpdatePage(page);
|
||||||
|
|
||||||
// get differences between old and new page permissions
|
// save url mapping if page path changed
|
||||||
|
if (currentPage.Path != page.Path)
|
||||||
|
{
|
||||||
|
var url = HttpContext.Request.Scheme + "://" + _alias.Name + "/";
|
||||||
|
var urlMapping = new UrlMapping();
|
||||||
|
urlMapping.SiteId = page.SiteId;
|
||||||
|
urlMapping.Url = url + currentPage.Path;
|
||||||
|
urlMapping.MappedUrl = url + page.Path;
|
||||||
|
urlMapping.Requests = 0;
|
||||||
|
urlMapping.CreatedOn = System.DateTime.UtcNow;
|
||||||
|
urlMapping.RequestedOn = System.DateTime.UtcNow;
|
||||||
|
_urlMappings.AddUrlMapping(urlMapping);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get differences between current and new page permissions
|
||||||
var newPermissions = _permissionRepository.DecodePermissions(page.Permissions, page.SiteId, EntityNames.Page, page.PageId).ToList();
|
var newPermissions = _permissionRepository.DecodePermissions(page.Permissions, page.SiteId, EntityNames.Page, page.PageId).ToList();
|
||||||
var added = GetPermissionsDifferences(newPermissions, oldPermissions);
|
var added = GetPermissionsDifferences(newPermissions, currentPermissions);
|
||||||
var removed = GetPermissionsDifferences(oldPermissions, newPermissions);
|
var removed = GetPermissionsDifferences(currentPermissions, newPermissions);
|
||||||
|
|
||||||
// synchronize module permissions
|
// synchronize module permissions
|
||||||
if (added.Count > 0 || removed.Count > 0)
|
if (added.Count > 0 || removed.Count > 0)
|
||||||
|
@ -270,7 +289,6 @@ namespace Oqtane.Controllers
|
||||||
foreach (PageModule pageModule in _pageModules.GetPageModules(page.PageId, "").ToList())
|
foreach (PageModule pageModule in _pageModules.GetPageModules(page.PageId, "").ToList())
|
||||||
{
|
{
|
||||||
var modulePermissions = _permissionRepository.GetPermissions(EntityNames.Module, pageModule.Module.ModuleId).ToList();
|
var modulePermissions = _permissionRepository.GetPermissions(EntityNames.Module, pageModule.Module.ModuleId).ToList();
|
||||||
//var modulePermissions = _permissionRepository.DecodePermissions(pageModule.Module.Permissions, page.SiteId, EntityNames.Module, pageModule.ModuleId).ToList();
|
|
||||||
// permissions added
|
// permissions added
|
||||||
foreach(Permission permission in added)
|
foreach(Permission permission in added)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user