refactor: 重构网站设置脚本

#Comment
防止暴露字典表配置信息到客户端脚本中
This commit is contained in:
Argo Zhang 2020-02-16 14:18:07 +08:00
parent 5d141b3b78
commit e5dfcfe398
No known key found for this signature in database
GPG Key ID: 152E398953DDF19F
7 changed files with 65 additions and 37 deletions

View File

@ -26,7 +26,7 @@ INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('头像地址
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站样式', '蓝色样式', 'blue.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站样式', '黑色样式', 'black.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站样式', 'AdminLTE', 'lte.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('当前样式', '使用样式', 'blue.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '使用样式', 'blue.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '前台首页', '~/Home/Index', 0);
-- 网站UI设置

View File

@ -22,8 +22,8 @@ namespace Bootstrap.Admin.Controllers.Api
/// <param name="values"></param>
/// <returns></returns>
[HttpPost]
[ButtonAuthorize(Url = "~/Admin/Settings", Auth = "saveTitle,saveFooter,saveTheme,saveUISettings,clearCache,clearAllCache,loginSettings,lockScreen,defaultApp,blazor")]
public bool Post([FromBody]IEnumerable<BootstrapDict> values) => DictHelper.SaveSettings(values);
[ButtonAuthorize(Url = "~/Admin/Settings", Auth = "saveTitle,saveFooter,saveTheme,saveUISettings,loginSettings,lockScreen,defaultApp,blazor,iplocate")]
public bool Post([FromBody]IEnumerable<BootstrapDict> values) => DictHelper.SaveUISettings(values);
/// <summary>
/// 获取网站缓存站点集合

View File

@ -165,7 +165,13 @@ namespace Bootstrap.Admin.Pages.Views.Admin.Components
/// </summary>
protected void SaveWebTitle()
{
var ret = DictHelper.SaveWebTitle(Model.Title);
var ret = DictHelper.SaveSettings(new BootstrapDict[]{
new BootstrapDict() {
Category = "网站设置",
Name = "网站标题",
Code = Model.Title
}
});
RootLayout?.OnWebTitleChanged(Model.Title);
ShowMessage("保存网站标题", ret);
}
@ -175,7 +181,13 @@ namespace Bootstrap.Admin.Pages.Views.Admin.Components
/// </summary>
protected void SaveWebFooter()
{
var ret = DictHelper.SaveWebFooter(Model.Footer);
var ret = DictHelper.SaveSettings(new BootstrapDict[]{
new BootstrapDict() {
Category = "网站设置",
Name = "网站页脚",
Code = Model.Footer
}
});
RootLayout?.OnWebFooterChanged(Model.Footer);
ShowMessage("保存网站页脚", ret);
}

View File

@ -11,7 +11,9 @@ $(function () {
case 'footer':
data = dataBinder.get();
$.bc({
url: Settings.url, data: [{ name: '网站页脚', code: data.Footer, category: '网站设置' }], title: '保存网站页脚', method: "post",
url: Settings.url, data: [
{ name: 'SaveWebFooter', code: data.Footer }
], title: '保存网站页脚', method: "post",
callback: function (result) {
if (result) $('#websiteFooter').text(data.Footer);
}
@ -20,16 +22,20 @@ $(function () {
case 'title':
data = dataBinder.get();
$.bc({
url: Settings.url, data: [{ name: '网站标题', code: data.Title, category: '网站设置' }], title: '保存网站标题', method: "post",
url: Settings.url, data: [
{ name: 'SaveWebTitle', code: data.Title }
], title: '保存网站标题', method: "post",
callback: function (result) {
if (result) $('#websiteTitle').text(data.Title);
if (result) $('#websiteTitle, aside .nav-brand a span').text(data.Title);
}
});
break;
case 'css':
var cssDefine = $css.val();
$.bc({
url: Settings.url, data: [{ name: '使用样式', code: cssDefine, category: '当前样式' }], title: '保存网站样式', method: "post",
url: Settings.url, data: [
{ name: 'SaveTheme', code: cssDefine }
], title: '保存网站样式', method: "post",
callback: function (result) {
if (result) {
window.setTimeout(function () { window.location.reload(true); }, 1000);
@ -43,9 +49,9 @@ $(function () {
var fixedTableHeader = $('#tableHeader').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: [
{ name: '卡片标题状态', code: cardTitle, category: '网站设置' },
{ name: '侧边栏状态', code: uiSettings, category: '网站设置' },
{ name: '固定表头', code: fixedTableHeader, category: '网站设置' }
{ name: 'ShowCardTitle', code: cardTitle },
{ name: 'ShowSideBar', code: uiSettings },
{ name: 'FixedTableHeader', code: fixedTableHeader }
], title: '保存网站设置', method: "post",
callback: function (result) {
if (result) {
@ -58,13 +64,19 @@ $(function () {
var mobile = $('#mobile').prop('checked') ? "1" : "0";
var oauth = $('#oauth').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: [{ name: 'OAuth 认证登录', code: oauth, category: '网站设置' }, { name: '短信验证码登录', code: mobile, category: '网站设置' }], title: '登录设置', method: "post"
url: Settings.url, data: [
{ name: 'OAuth', code: oauth },
{ name: 'SMS', code: mobile }
], title: '登录设置', method: "post"
});
break;
case 'saveAutoLock':
var autoLock = $('#lockScreen').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: [{ name: '自动锁屏', code: autoLock, category: '网站设置' }, { name: '自动锁屏时长', code: $('#lockPeriod').val(), category: '网站设置' }], title: '保存自动锁屏设置', method: "post",
url: Settings.url, data: [
{ name: 'AutoLock', code: autoLock },
{ name: 'AutoLockPeriod', code: $('#lockPeriod').val() }
], title: '保存自动锁屏设置', method: "post",
callback: function (result) {
if (result) {
window.setTimeout(function () { window.location.reload(true); }, 1000);
@ -75,13 +87,13 @@ $(function () {
case 'saveDefaultApp':
var defaultApp = $('#defaultApp').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: [{ name: '默认应用程序', code: defaultApp, category: '网站设置' }], title: '保存默认应用程序设置', method: "post"
url: Settings.url, data: [{ name: 'DefaultApp', code: defaultApp }], title: '保存默认应用程序设置', method: "post"
});
break;
case 'saveBlazor':
var blazor = $('#blazor').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: [{ name: 'Blazor', code: blazor, category: '网站设置' }], title: 'Blazor 设置', method: "post",
url: Settings.url, data: [{ name: 'Blazor', code: blazor }], title: 'Blazor 设置', method: "post",
callback: function (result) {
if (result) {
// 通过值设置是否显示 Blazor 挂件
@ -95,7 +107,7 @@ $(function () {
case 'saveIpLocator':
var iplocator = $iplocator.val();
$.bc({
url: Settings.url, data: [{ name: 'IP地理位置接口', code: iplocator, category: '网站设置' }], title: '保存地理位置服务设置', method: "post"
url: Settings.url, data: [{ name: 'IPLocator', code: iplocator }], title: '保存地理位置服务设置', method: "post"
});
break;
}

View File

@ -101,7 +101,7 @@ namespace Bootstrap.DataAccess
/// <returns></returns>
public virtual string RetrieveActiveTheme()
{
var theme = DictHelper.RetrieveDicts().FirstOrDefault(d => d.Name == "使用样式" && d.Category == "当前样式" && d.Define == 0);
var theme = DictHelper.RetrieveDicts().FirstOrDefault(d => d.Name == "使用样式" && d.Category == "网站设置" && d.Define == 0);
return theme == null ? string.Empty : (theme.Code.Equals("site.css", StringComparison.OrdinalIgnoreCase) ? string.Empty : theme.Code);
}

View File

@ -116,30 +116,34 @@ namespace Bootstrap.DataAccess
}
/// <summary>
/// 保存网站标题
/// 保存网站UI设置
/// </summary>
/// <param name="code"></param>
/// <param name="items"></param>
/// <returns></returns>
public static bool SaveWebTitle(string code)
public static bool SaveUISettings(IEnumerable<BootstrapDict> items)
{
var ret = DictHelper.SaveSettings(new BootstrapDict[]
var cache = new Dictionary<string, string>()
{
new BootstrapDict() { Category = "网站设置", Name = "网站标题", Code = code }
});
return ret;
}
/// <summary>
/// 保存网站页脚
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public static bool SaveWebFooter(string code)
{
var ret = DictHelper.SaveSettings(new BootstrapDict[]
["SaveWebTitle"] = "网站标题",
["SaveWebFooter"] = "网站页脚",
["SaveTheme"] = "使用样式",
["ShowCardTitle"] = "卡片标题状态",
["ShowSideBar"] = "侧边栏状态",
["FixedTableHeader"] = "固定表头",
["OAuth"] = "OAuth 认证登录",
["SMS"] = "短信验证码登录",
["AutoLock"] = "自动锁屏",
["AutoLockPeriod"] = "自动锁屏时长",
["DefaultApp"] = "默认应用程序",
["Blazor"] = "Blazor",
["IPLocator"] = "IP地理位置接口"
};
var ret = DictHelper.SaveSettings(items.Where(i => cache.Any(c => c.Key == i.Name)).Select(i => new BootstrapDict()
{
new BootstrapDict() { Category = "网站设置", Name = "网站页脚", Code = code }
});
Category = "网站设置",
Name = cache[i.Name],
Code = i.Code
}));
return ret;
}