fixes to emable module package installation from wwwroot/modules

This commit is contained in:
Shaun Walker
2020-04-11 14:02:42 -04:00
parent 93a09f6db8
commit dbcb973119
4 changed files with 41 additions and 28 deletions

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.Extensions.Caching.Memory;
using Oqtane.Extensions;
using Oqtane.Models;
using Oqtane.Modules;
using Oqtane.Shared;
@ -36,7 +37,7 @@ namespace Oqtane.Repository
public void UpdateModuleDefinition(ModuleDefinition moduleDefinition)
{
_permissions.UpdatePermissions(moduleDefinition.SiteId, EntityNames.ModuleDefinition, moduleDefinition.ModuleDefinitionId, moduleDefinition.Permissions);
_cache.Remove("moduledefinitions");
_cache.Remove("moduledefinitions:" + moduleDefinition.SiteId.ToString());
}
public void DeleteModuleDefinition(int moduleDefinitionId, int siteId)
@ -45,27 +46,35 @@ namespace Oqtane.Repository
_permissions.DeletePermissions(siteId, EntityNames.ModuleDefinition, moduleDefinitionId);
_db.ModuleDefinition.Remove(moduleDefinition);
_db.SaveChanges();
_cache.Remove("moduledefinitions");
}
public List<ModuleDefinition> LoadModuleDefinitions(int siteId)
{
List<ModuleDefinition> moduleDefinitions;
// get module definitions for site
List<ModuleDefinition> moduleDefinitions = _cache.GetOrCreate("moduledefinitions:" + siteId.ToString(), entry =>
{
entry.SlidingExpiration = TimeSpan.FromMinutes(30);
return LoadSiteModuleDefinitions(siteId);
});
return moduleDefinitions;
}
// get run-time module definitions
moduleDefinitions = _cache.GetOrCreate("moduledefinitions", entry =>
private List<ModuleDefinition> LoadSiteModuleDefinitions(int siteId)
{
// get module assemblies
List<ModuleDefinition> moduleDefinitions = _cache.GetOrCreate("moduledefinitions", entry =>
{
entry.SlidingExpiration = TimeSpan.FromMinutes(30);
return LoadModuleDefinitionsFromAssemblies();
});
// get module defintion permissions for site
// get module definition permissions for site
List<Permission> permissions = _permissions.GetPermissions(siteId, EntityNames.ModuleDefinition).ToList();
// get module definitions in database
List<ModuleDefinition> moduledefs = _db.ModuleDefinition.ToList();
// sync run-time module definitions with database
// sync module assemblies with database
foreach (ModuleDefinition moduledefinition in moduleDefinitions)
{
ModuleDefinition moduledef = moduledefs.Where(item => item.ModuleDefinitionName == moduledefinition.ModuleDefinitionName).FirstOrDefault();
@ -88,8 +97,8 @@ namespace Oqtane.Repository
{
moduledefinition.Permissions = _permissions.EncodePermissions(permissions.Where(item => item.EntityId == moduledef.ModuleDefinitionId));
}
// remove module definition from list
moduledefs.Remove(moduledef);
// remove module definition from list as it is already synced
moduledefs.Remove(moduledef);
}
moduledefinition.ModuleDefinitionId = moduledef.ModuleDefinitionId;
moduledefinition.SiteId = siteId;
@ -104,6 +113,7 @@ namespace Oqtane.Repository
{
_permissions.DeletePermissions(siteId, EntityNames.ModuleDefinition, moduledefinition.ModuleDefinitionId);
_db.ModuleDefinition.Remove(moduledefinition); // delete
_db.SaveChanges();
}
return moduleDefinitions;
@ -166,11 +176,18 @@ namespace Oqtane.Repository
moduledefinition.AssemblyName = assembly.FullName.Split(",")[0];
if (moduledefinition.Categories == "Admin")
{
moduledefinition.Permissions = "[{\"PermissionName\":\"Utilize\",\"Permissions\":\"" + Constants.AdminRole + "\"}]";
moduledefinition.Permissions = new List<Permission>
{
new Permission(PermissionNames.Utilize, Constants.AdminRole, true)
}.EncodePermissions();
}
else
{
moduledefinition.Permissions = "[{\"PermissionName\":\"Utilize\",\"Permissions\":\"" + Constants.AdminRole + ";" + Constants.RegisteredRole + "\"}]";
moduledefinition.Permissions = new List<Permission>
{
new Permission(PermissionNames.Utilize, Constants.AdminRole, true),
new Permission(PermissionNames.Utilize, Constants.RegisteredRole, true)
}.EncodePermissions();
}
moduledefinitions.Add(moduledefinition);
index = moduledefinitions.FindIndex(item => item.ModuleDefinitionName == qualifiedModuleType);