Permission Optimalization
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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(','))
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user