diff --git a/Oqtane.Client/Services/Interfaces/ISettingService.cs b/Oqtane.Client/Services/Interfaces/ISettingService.cs
index e9bb5126..e02261f8 100644
--- a/Oqtane.Client/Services/Interfaces/ISettingService.cs
+++ b/Oqtane.Client/Services/Interfaces/ISettingService.cs
@@ -1,4 +1,5 @@
using Oqtane.Models;
+using System;
using System.Collections.Generic;
using System.Threading.Tasks;
@@ -128,6 +129,19 @@ namespace Oqtane.Services
///
Task UpdateFolderSettingsAsync(Dictionary folderSettings, int folderId);
+ ///
+ /// Returns a key-value dictionary of all tenant settings
+ ///
+ ///
+ Task> GetHostSettingsAsync();
+
+ ///
+ /// Updates a host setting
+ ///
+ ///
+ ///
+ Task UpdateHostSettingsAsync(Dictionary hostSettings);
+
///
/// Returns a key-value dictionary of all settings for the given entityName
///
@@ -150,7 +164,7 @@ namespace Oqtane.Services
///
///
///
- Task GetSettingAsync(int settingId);
+ Task GetSettingAsync(string entityName, int settingId);
///
@@ -172,7 +186,7 @@ namespace Oqtane.Services
///
///
///
- Task DeleteSettingAsync(int settingId);
+ Task DeleteSettingAsync(string entityName, int settingId);
///
/// Gets the value of the given settingName (key) from the given key-value dictionary
@@ -195,5 +209,13 @@ namespace Oqtane.Services
Dictionary SetSetting(Dictionary settings, string settingName, string settingValue, bool isPublic);
Dictionary MergeSettings(Dictionary settings1, Dictionary settings2);
-}
+
+
+ [Obsolete("GetSettingAsync(int settingId) is deprecated. Use GetSettingAsync(string entityName, int settingId) instead.", false)]
+ Task GetSettingAsync(int settingId);
+
+ [Obsolete("DeleteSettingAsync(int settingId) is deprecated. Use DeleteSettingAsync(string entityName, int settingId) instead.", false)]
+ Task DeleteSettingAsync(int settingId);
+
+ }
}
diff --git a/Oqtane.Client/Services/SettingService.cs b/Oqtane.Client/Services/SettingService.cs
index fb7c7704..74cf3949 100644
--- a/Oqtane.Client/Services/SettingService.cs
+++ b/Oqtane.Client/Services/SettingService.cs
@@ -21,6 +21,7 @@ namespace Oqtane.Services
}
private string Apiurl => CreateApiUrl("Setting", _siteState.Alias);
+
public async Task> GetTenantSettingsAsync()
{
return await GetSettingsAsync(EntityNames.Tenant, -1);
@@ -101,6 +102,16 @@ namespace Oqtane.Services
await UpdateSettingsAsync(folderSettings, EntityNames.Folder, folderId);
}
+ public async Task> GetHostSettingsAsync()
+ {
+ return await GetSettingsAsync(EntityNames.Host, -1);
+ }
+
+ public async Task UpdateHostSettingsAsync(Dictionary hostSettings)
+ {
+ await UpdateSettingsAsync(hostSettings, EntityNames.Host, -1);
+ }
+
public async Task> GetSettingsAsync(string entityName, int entityId)
{
var dictionary = new Dictionary();
@@ -154,9 +165,9 @@ namespace Oqtane.Services
}
- public async Task GetSettingAsync(int settingId)
+ public async Task GetSettingAsync(string entityName, int settingId)
{
- return await GetJsonAsync($"{Apiurl}/{settingId}");
+ return await GetJsonAsync($"{Apiurl}/{settingId}/{entityName}");
}
public async Task AddSettingAsync(Setting setting)
@@ -169,9 +180,9 @@ namespace Oqtane.Services
return await PutJsonAsync($"{Apiurl}/{setting.SettingId}", setting);
}
- public async Task DeleteSettingAsync(int settingId)
+ public async Task DeleteSettingAsync(string entityName, int settingId)
{
- await DeleteAsync($"{Apiurl}/{settingId}");
+ await DeleteAsync($"{Apiurl}/{settingId}/{entityName}");
}
@@ -230,5 +241,19 @@ namespace Oqtane.Services
}
return settings1;
}
+
+ [Obsolete("GetSettingAsync(int settingId) is deprecated. Use GetSettingAsync(string entityName, int settingId) instead.", false)]
+ public async Task GetSettingAsync(int settingId)
+ {
+ return await GetJsonAsync($"{Apiurl}/{settingId}/tenant");
+ }
+
+ [Obsolete("DeleteSettingAsync(int settingId) is deprecated. Use DeleteSettingAsync(string entityName, int settingId) instead.", false)]
+ public async Task DeleteSettingAsync(int settingId)
+ {
+ await DeleteAsync($"{Apiurl}/{settingId}/tenant");
+ }
+
+
}
}
diff --git a/Oqtane.Server/Controllers/SettingController.cs b/Oqtane.Server/Controllers/SettingController.cs
index e96296f9..db7ee16b 100644
--- a/Oqtane.Server/Controllers/SettingController.cs
+++ b/Oqtane.Server/Controllers/SettingController.cs
@@ -52,11 +52,11 @@ namespace Oqtane.Controllers
return settings;
}
- // GET api//5
- [HttpGet("{id}")]
- public Setting Get(int id)
+ // GET api//5/xxx
+ [HttpGet("{id}/{entityName}")]
+ public Setting Get(int id, string entityName)
{
- Setting setting = _settings.GetSetting(id);
+ Setting setting = _settings.GetSetting(entityName, id);
if (IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.View))
{
if (setting.EntityName == EntityNames.Site && !User.IsInRole(RoleNames.Admin) && !setting.IsPublic)
@@ -111,14 +111,14 @@ namespace Oqtane.Controllers
return setting;
}
- // DELETE api//5
- [HttpDelete("{id}")]
- public void Delete(int id)
+ // DELETE api//5/xxx
+ [HttpDelete("{id}/{entityName}")]
+ public void Delete(string entityName, int id)
{
- Setting setting = _settings.GetSetting(id);
+ Setting setting = _settings.GetSetting(entityName, id);
if (IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit))
{
- _settings.DeleteSetting(id);
+ _settings.DeleteSetting(setting.EntityName, id);
AddSyncEvent(setting.EntityName);
_logger.Log(LogLevel.Information, this, LogFunction.Delete, "Setting Deleted {Setting}", setting);
}
@@ -140,6 +140,8 @@ namespace Oqtane.Controllers
switch (entityName)
{
case EntityNames.Tenant:
+ case EntityNames.ModuleDefinition:
+ case EntityNames.Host:
authorized = User.IsInRole(RoleNames.Host);
break;
case EntityNames.Site:
@@ -154,9 +156,6 @@ namespace Oqtane.Controllers
break;
case EntityNames.Page:
case EntityNames.Module:
- case EntityNames.ModuleDefinition:
- authorized = User.IsInRole(RoleNames.Host);
- break;
case EntityNames.Folder:
authorized = _userPermissions.IsAuthorized(User, entityName, entityId, permissionName);
break;
diff --git a/Oqtane.Server/Repository/Context/MasterDBContext.cs b/Oqtane.Server/Repository/Context/MasterDBContext.cs
index a7874100..58b80d59 100644
--- a/Oqtane.Server/Repository/Context/MasterDBContext.cs
+++ b/Oqtane.Server/Repository/Context/MasterDBContext.cs
@@ -70,6 +70,7 @@ namespace Oqtane.Repository
public virtual DbSet ModuleDefinition { get; set; }
public virtual DbSet Job { get; set; }
public virtual DbSet JobLog { get; set; }
+ public virtual DbSet Setting { get; set; }
public override int SaveChanges()
{
diff --git a/Oqtane.Server/Repository/Context/TenantDBContext.cs b/Oqtane.Server/Repository/Context/TenantDBContext.cs
index bac4c813..dc2c219b 100644
--- a/Oqtane.Server/Repository/Context/TenantDBContext.cs
+++ b/Oqtane.Server/Repository/Context/TenantDBContext.cs
@@ -18,7 +18,6 @@ namespace Oqtane.Repository
public virtual DbSet Page { get; set; }
public virtual DbSet PageModule { get; set; }
public virtual DbSet Module { get; set; }
- public virtual DbSet ModuleDefinition { get; set; }
public virtual DbSet User { get; set; }
public virtual DbSet Profile { get; set; }
public virtual DbSet Role { get; set; }
diff --git a/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs b/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs
index b38d5b62..89f04da7 100644
--- a/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs
+++ b/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs
@@ -9,7 +9,7 @@ namespace Oqtane.Repository
IEnumerable GetSettings(string entityName, int entityId);
Setting AddSetting(Setting setting);
Setting UpdateSetting(Setting setting);
- Setting GetSetting(int settingId);
- void DeleteSetting(int settingId);
+ Setting GetSetting(string entityName, int settingId);
+ void DeleteSetting(string entityName, int settingId);
}
}
diff --git a/Oqtane.Server/Repository/SettingRepository.cs b/Oqtane.Server/Repository/SettingRepository.cs
index 34586f6e..4d1e00b6 100644
--- a/Oqtane.Server/Repository/SettingRepository.cs
+++ b/Oqtane.Server/Repository/SettingRepository.cs
@@ -2,53 +2,100 @@ using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Oqtane.Models;
+using Oqtane.Shared;
namespace Oqtane.Repository
{
public class SettingRepository : ISettingRepository
{
- private TenantDBContext _db;
+ private TenantDBContext _tenant;
+ private MasterDBContext _master;
- public SettingRepository(TenantDBContext context)
+ public SettingRepository(TenantDBContext tenant, MasterDBContext master)
{
- _db = context;
+ _tenant = tenant;
+ _master = master;
}
public IEnumerable GetSettings(string entityName)
{
- return _db.Setting.Where(item => item.EntityName == entityName);
+ if (IsMaster(entityName))
+ {
+ return _master.Setting.Where(item => item.EntityName == entityName);
+ }
+ else
+ {
+ return _tenant.Setting.Where(item => item.EntityName == entityName);
+ }
}
public IEnumerable GetSettings(string entityName, int entityId)
{
- return _db.Setting.Where(item => item.EntityName == entityName)
- .Where(item => item.EntityId == entityId);
+ var settings = GetSettings(entityName);
+ return settings.Where(item => item.EntityId == entityId);
}
public Setting AddSetting(Setting setting)
{
- _db.Setting.Add(setting);
- _db.SaveChanges();
+ if (IsMaster(setting.EntityName))
+ {
+ _master.Setting.Add(setting);
+ _master.SaveChanges();
+ }
+ else
+ {
+ _tenant.Setting.Add(setting);
+ _tenant.SaveChanges();
+ }
return setting;
}
public Setting UpdateSetting(Setting setting)
{
- _db.Entry(setting).State = EntityState.Modified;
- _db.SaveChanges();
+ if (IsMaster(setting.EntityName))
+ {
+ _master.Entry(setting).State = EntityState.Modified;
+ _master.SaveChanges();
+ }
+ else
+ {
+ _tenant.Entry(setting).State = EntityState.Modified;
+ _tenant.SaveChanges();
+ }
return setting;
}
- public Setting GetSetting(int settingId)
+ public Setting GetSetting(string entityName, int settingId)
{
- return _db.Setting.Find(settingId);
+ if (IsMaster(entityName))
+ {
+ return _master.Setting.Find(settingId);
+ }
+ else
+ {
+ return _tenant.Setting.Find(settingId);
+ }
}
- public void DeleteSetting(int settingId)
+ public void DeleteSetting(string entityName, int settingId)
{
- Setting setting = _db.Setting.Find(settingId);
- _db.Setting.Remove(setting);
- _db.SaveChanges();
+ if (IsMaster(entityName))
+ {
+ Setting setting = _master.Setting.Find(settingId);
+ _master.Setting.Remove(setting);
+ _master.SaveChanges();
+ }
+ else
+ {
+ Setting setting = _tenant.Setting.Find(settingId);
+ _tenant.Setting.Remove(setting);
+ _tenant.SaveChanges();
+ }
+ }
+
+ private bool IsMaster(string EntityName)
+ {
+ return (EntityName == EntityNames.ModuleDefinition || EntityName == EntityNames.Host);
}
}
}
diff --git a/Oqtane.Shared/Shared/EntityNames.cs b/Oqtane.Shared/Shared/EntityNames.cs
index 5efbd716..2a31e76d 100644
--- a/Oqtane.Shared/Shared/EntityNames.cs
+++ b/Oqtane.Shared/Shared/EntityNames.cs
@@ -11,5 +11,6 @@ namespace Oqtane.Shared
public const string Folder = "Folder";
public const string User = "User";
public const string Visitor = "Visitor";
+ public const string Host = "Host";
}
}