Permission Optimalization

This commit is contained in:
Pavel Vesely
2020-04-26 16:19:20 +02:00
parent 457debf35e
commit 7606e7b488
13 changed files with 97 additions and 84 deletions

View File

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Oqtane.Extensions;
using Oqtane.Models;
using Oqtane.Shared;
@ -23,7 +24,7 @@ namespace Oqtane.Repository
IEnumerable<File> files = _db.File.Where(item => item.FolderId == folderId).Include(item => item.Folder);
foreach (File file in files)
{
file.Folder.Permissions = _permissions.EncodePermissions(permissions);
file.Folder.Permissions = permissions.EncodePermissions();
}
return files;
}
@ -48,7 +49,7 @@ namespace Oqtane.Repository
if (file != null)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(EntityNames.Folder, file.FolderId).ToList();
file.Folder.Permissions = _permissions.EncodePermissions(permissions);
file.Folder.Permissions = permissions.EncodePermissions();
}
return file;
}

View File

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Oqtane.Extensions;
using Oqtane.Models;
using Oqtane.Shared;
@ -23,7 +24,7 @@ namespace Oqtane.Repository
IEnumerable<Folder> folders = _db.Folder.Where(item => item.SiteId == siteId);
foreach(Folder folder in folders)
{
folder.Permissions = _permissions.EncodePermissions(permissions.Where(item => item.EntityId == folder.FolderId));
folder.Permissions = permissions.Where(item => item.EntityId == folder.FolderId).EncodePermissions();
}
return folders;
}
@ -49,8 +50,7 @@ namespace Oqtane.Repository
Folder folder = _db.Folder.Find(folderId);
if (folder != null)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(EntityNames.Folder, folder.FolderId).ToList();
folder.Permissions = _permissions.EncodePermissions(permissions);
folder.Permissions = _permissions.GetPermissionString(EntityNames.Folder, folder.FolderId);
}
return folder;
}
@ -60,8 +60,7 @@ namespace Oqtane.Repository
Folder folder = _db.Folder.Where(item => item.SiteId == siteId && item.Path == path).FirstOrDefault();
if (folder != null)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(EntityNames.Folder, folder.FolderId).ToList();
folder.Permissions = _permissions.EncodePermissions(permissions);
folder.Permissions = _permissions.GetPermissionString(EntityNames.Folder, folder.FolderId);
}
return folder;
}

View File

@ -1,6 +1,7 @@
using System.Collections.Generic;
using Oqtane.Models;
// ReSharper disable once CheckNamespace
namespace Oqtane.Repository
{
public interface IPermissionRepository
@ -8,13 +9,17 @@ namespace Oqtane.Repository
IEnumerable<Permission> GetPermissions(int siteId, string entityName);
IEnumerable<Permission> GetPermissions(string entityName, int entityId);
IEnumerable<Permission> GetPermissions(string entityName, int entityId, string permissionName);
string GetPermissionString(int siteId, string entityName);
string GetPermissionString(string entityName, int entityId);
string GetPermissionString(string entityName, int entityId, string permissionName);
Permission AddPermission(Permission permission);
Permission UpdatePermission(Permission permission);
void UpdatePermissions(int siteId, string entityName, int entityId, string permissionStrings);
Permission GetPermission(int permissionId);
void DeletePermission(int permissionId);
void DeletePermissions(int siteId, string entityName, int entityId);
string EncodePermissions(IEnumerable<Permission> permissionList);
IEnumerable<Permission> DecodePermissions(string permissions, int siteId, string entityName, int entityId);
}
}

View File

@ -115,7 +115,7 @@ namespace Oqtane.Repository
}
else
{
moduledefinition.Permissions = _permissions.EncodePermissions(permissions.Where(item => item.EntityId == moduledef.ModuleDefinitionId));
moduledefinition.Permissions = permissions.Where(item => item.EntityId == moduledef.ModuleDefinitionId).EncodePermissions();
}
// remove module definition from list as it is already synced
moduledefs.Remove(moduledef);
@ -160,7 +160,7 @@ namespace Oqtane.Repository
{
if (modulecontroltype.Name != "ModuleBase" && !modulecontroltype.Namespace.EndsWith(".Controls"))
{
string[] typename = modulecontroltype.AssemblyQualifiedName.Split(',').Select(item => item.Trim()).ToList().ToArray();
string[] typename = modulecontroltype.AssemblyQualifiedName?.Split(',').Select(item => item.Trim()).ToArray();
string[] segments = typename[0].Split('.');
Array.Resize(ref segments, segments.Length - 1);
string moduleType = string.Join(".", segments);
@ -195,7 +195,7 @@ namespace Oqtane.Repository
// set internal properties
moduledefinition.ModuleDefinitionName = qualifiedModuleType;
moduledefinition.ControlTypeTemplate = moduleType + "." + Constants.ActionToken + ", " + typename[1];
moduledefinition.AssemblyName = assembly.FullName.Split(",")[0];
moduledefinition.AssemblyName = assembly.GetName().Name;
if (assembly.FullName.StartsWith("Oqtane.Client"))
{
moduledefinition.Version = Constants.Version;
@ -225,8 +225,8 @@ namespace Oqtane.Repository
moduledefinition = moduledefinitions[index];
// actions
var modulecontrolobject = Activator.CreateInstance(modulecontroltype);
string actions = (string)modulecontroltype.GetProperty("Actions").GetValue(modulecontrolobject);
if (actions != "")
string actions = (string)modulecontroltype.GetProperty("Actions")?.GetValue(modulecontrolobject);
if (!string.IsNullOrEmpty(actions))
{
foreach (string action in actions.Split(','))
{

View File

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
@ -52,9 +51,9 @@ namespace Oqtane.Repository
Module module = _db.Module.Find(moduleId);
if (module != null)
{
List<Permission> permissions = _permissions.GetPermissions("Module", module.ModuleId).ToList();
module.Permissions = _permissions.EncodePermissions(permissions);
module.Permissions = _permissions.GetPermissionString("Module", module.ModuleId);
}
return module;
}
@ -75,7 +74,7 @@ namespace Oqtane.Repository
if (module != null)
{
List<ModuleDefinition> moduledefinitions = _moduleDefinitions.GetModuleDefinitions(module.SiteId).ToList();
ModuleDefinition moduledefinition = moduledefinitions.Where(item => item.ModuleDefinitionName == module.ModuleDefinitionName).FirstOrDefault();
ModuleDefinition moduledefinition = moduledefinitions.FirstOrDefault(item => item.ModuleDefinitionName == module.ModuleDefinitionName);
if (moduledefinition != null)
{
ModuleContent modulecontent = new ModuleContent();
@ -89,9 +88,10 @@ namespace Oqtane.Repository
if (moduletype != null && moduletype.GetInterface("IPortable") != null)
{
var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
modulecontent.Content = ((IPortable)moduleobject).ExportModule(module);
modulecontent.Content = ((IPortable) moduleobject).ExportModule(module);
}
}
content = JsonSerializer.Serialize(modulecontent);
}
}
@ -100,6 +100,7 @@ namespace Oqtane.Repository
{
// error occurred during export
}
return content;
}
@ -124,8 +125,8 @@ namespace Oqtane.Repository
if (moduletype != null && moduletype.GetInterface("IPortable") != null)
{
var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
((IPortable)moduleobject).ImportModule(module, modulecontent.Content, modulecontent.Version);
success = true;
((IPortable) moduleobject).ImportModule(module, modulecontent.Content, modulecontent.Version);
success = true;
}
}
}
@ -136,8 +137,8 @@ namespace Oqtane.Repository
{
// error occurred during import
}
return success;
}
}
}

View File

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Oqtane.Extensions;
using Oqtane.Models;
namespace Oqtane.Repository
@ -21,12 +22,12 @@ namespace Oqtane.Repository
IEnumerable<PageModule> pagemodules = _db.PageModule
.Include(item => item.Module) // eager load modules
.Where(item => item.Module.SiteId == siteId);
if (pagemodules != null && pagemodules.Any())
if (pagemodules.Any())
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(pagemodules.FirstOrDefault().Module.SiteId, "Module").ToList();
foreach (PageModule pagemodule in pagemodules)
{
pagemodule.Module.Permissions = _permissions.EncodePermissions(permissions.Where(item => item.EntityId == pagemodule.ModuleId));
pagemodule.Module.Permissions = permissions.Where(item => item.EntityId == pagemodule.ModuleId).EncodePermissions();
}
}
return pagemodules;
@ -37,16 +38,16 @@ namespace Oqtane.Repository
IEnumerable<PageModule> pagemodules = _db.PageModule
.Include(item => item.Module) // eager load modules
.Where(item => item.PageId == pageId);
if (pane != "" && pagemodules != null && pagemodules.Any())
if (pane != "" && pagemodules.Any())
{
pagemodules = pagemodules.Where(item => item.Pane == pane);
}
if (pagemodules != null && pagemodules.Any())
if (pagemodules.Any())
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(pagemodules.FirstOrDefault().Module.SiteId, "Module").ToList();
foreach (PageModule pagemodule in pagemodules)
{
pagemodule.Module.Permissions = _permissions.EncodePermissions(permissions.Where(item => item.EntityId == pagemodule.ModuleId));
pagemodule.Module.Permissions = permissions.Where(item => item.EntityId == pagemodule.ModuleId).EncodePermissions();
}
}
return pagemodules;
@ -72,8 +73,7 @@ namespace Oqtane.Repository
.SingleOrDefault(item => item.PageModuleId == pageModuleId);
if (pagemodule != null)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions("Module", pagemodule.ModuleId).ToList();
pagemodule.Module.Permissions = _permissions.EncodePermissions(permissions);
pagemodule.Module.Permissions = _permissions.GetPermissionString("Module", pagemodule.ModuleId);
}
return pagemodule;
}
@ -84,8 +84,7 @@ namespace Oqtane.Repository
.SingleOrDefault(item => item.PageId == pageId && item.ModuleId == moduleId);
if (pagemodule != null)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions("Module", pagemodule.ModuleId).ToList();
pagemodule.Module.Permissions = _permissions.EncodePermissions(permissions);
pagemodule.Module.Permissions = _permissions.GetPermissionString("Module", pagemodule.ModuleId);
}
return pagemodule;
}

View File

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Oqtane.Extensions;
using Oqtane.Models;
using Oqtane.Shared;
@ -25,7 +26,7 @@ namespace Oqtane.Repository
IEnumerable<Page> pages = _db.Page.Where(item => item.SiteId == siteId && item.UserId == null);
foreach(Page page in pages)
{
page.Permissions = _permissions.EncodePermissions(permissions.Where(item => item.EntityId == page.PageId));
page.Permissions = permissions.Where(item => item.EntityId == page.PageId).EncodePermissions();
}
return pages;
}
@ -51,8 +52,7 @@ namespace Oqtane.Repository
Page page = _db.Page.Find(pageId);
if (page != null)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(EntityNames.Page, page.PageId).ToList();
page.Permissions = _permissions.EncodePermissions(permissions);
page.Permissions = _permissions.GetPermissionString(EntityNames.Page, page.PageId);
}
return page;
}
@ -62,27 +62,22 @@ namespace Oqtane.Repository
Page page = _db.Page.Find(pageId);
if (page != null)
{
Page personalized = _db.Page.Where(item => item.SiteId == page.SiteId && item.Path == page.Path && item.UserId == userId).FirstOrDefault();
Page personalized = _db.Page.FirstOrDefault(item => item.SiteId == page.SiteId && item.Path == page.Path && item.UserId == userId);
if (personalized != null)
{
page = personalized;
}
if (page != null)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(EntityNames.Page, page.PageId).ToList();
page.Permissions = _permissions.EncodePermissions(permissions);
}
page.Permissions = _permissions.GetPermissionString(EntityNames.Page, page.PageId);
}
return page;
}
public Page GetPage(string path, int siteId)
{
Page page = _db.Page.Where(item => item.Path == path && item.SiteId == siteId).FirstOrDefault();
Page page = _db.Page.FirstOrDefault(item => item.Path == path && item.SiteId == siteId);
if (page != null)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(EntityNames.Page, page.PageId).ToList();
page.Permissions = _permissions.EncodePermissions(permissions);
page.Permissions = _permissions.GetPermissionString(EntityNames.Page, page.PageId);
}
return page;
}

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Oqtane.Extensions;
using Oqtane.Models;
namespace Oqtane.Repository
@ -41,6 +42,22 @@ namespace Oqtane.Repository
.Include(item => item.Role); // eager load roles
}
public string GetPermissionString(int siteId, string entityName)
{
return GetPermissions(siteId, entityName)?.EncodePermissions();
}
public string GetPermissionString(string entityName, int entityId)
{
return GetPermissions(entityName, entityId)?.EncodePermissions();
}
public string GetPermissionString(string entityName, int entityId, string permissionName)
{
return GetPermissions(entityName, entityId, permissionName)?.EncodePermissions();
}
public Permission AddPermission(Permission permission)
{
_db.Permission.Add(permission);