Skip to content

Commit 3c82380

Browse files
committed
support prevent modify super admin
1 parent 058a8e4 commit 3c82380

File tree

10 files changed

+78
-12
lines changed

10 files changed

+78
-12
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
Different to [ZKWeb.Demo](https://github.com/zkweb-framework/ZKWeb.Demo), this demo use Entity Framework Core and it's a single page application.<br/>
44
Also it supports linux (docker) hosting, which [ZKWeb.Demo](https://github.com/zkweb-framework/ZKWeb.Demo) doesn't for now.
55

6+
This demo is host on [http://mvvmdemo.zkweb.org](http://mvvmdemo.zkweb.org)<br/>
7+
68
# Screenshots
79

810
![preview](./docs/preview.jpg)

ZKWeb.MVVMDemo.sln

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Microsoft Visual Studio Solution File, Format Version 12.00
22
# Visual Studio 15
3-
VisualStudioVersion = 15.0.26730.10
3+
VisualStudioVersion = 15.0.26730.12
44
MinimumVisualStudioVersion = 10.0.40219.1
55
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{ADA47558-C1AF-4CFA-B0FF-AF09BE8E4602}"
66
EndProject

src/ZKWeb.MVVMDemo.AspNetCore/App_Data/config.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,8 @@
1616
"MVVM.Example.CrudExample",
1717
"MVVM.Angular.Support",
1818
"MVVM.Angular.Website"
19-
]
19+
],
20+
"Extra": {
21+
"Common.Admin.PreventModifySuperAdmin": true
22+
}
2023
}

src/ZKWeb.MVVMPlugins/MVVM.Angular.Website/static/src/modules/generated_module/translations/zh-cn.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ export class Translation_zh_CN {
123123
"IsSuccess": "是否成功",
124124
"Switch Language": "切换语言",
125125
"Switch Timezone": "切换时区",
126+
"Modify super admin is disabled, please modify website configuration": "网站已禁止修改超级管理员, 有需要请修改网站设置启用",
127+
"Delete super admin is disabled, please modify website configuration": "网站已禁止删除超级管理员, 有需要请修改网站设置启用",
126128
"ExampleData": "示例数据",
127129
"Example Datas": "示例数据",
128130
"Edit ExampleData": "编辑示例数据",

src/ZKWeb.MVVMPlugins/MVVM.Common.MultiTenant/src/Domain/Services/TenantManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class TenantManager : DomainServiceBase<Tenant, Guid>
1616
/// <summary>
1717
/// 主租户的名称
1818
/// </summary>
19-
protected const string MasterTenantName = "Master";
19+
public const string MasterTenantName = "Master";
2020
/// <summary>
2121
/// 主租户的实例
2222
/// </summary>

src/ZKWeb.MVVMPlugins/MVVM.Common.Organization/src/Components/ExtraConfigKeys/OrganizationExtraConfigKeys.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ public class OrganizationExtraConfigKeys
1414
/// </summary>
1515
public const string SessionExpireDaysWithoutRememberLogin = "Common.Admin.SessionExpireDaysWithoutRememberLogin";
1616
/// <summary>
17+
/// 是否禁止修改或删除超级管理员
18+
/// </summary>
19+
public const string PreventModifySuperAdmin = "Common.Admin.PreventModifySuperAdmin";
20+
/// <summary>
1721
/// 头像宽度
1822
/// </summary>
1923
public const string AvatarWidth = "Common.Admin.AvatarWidth";

src/ZKWeb.MVVMPlugins/MVVM.Common.Organization/src/Components/Translates/zh_CN.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,11 @@ public zh_CN()
113113
{ "ErrorMessage", "错误信息" },
114114
{ "IsSuccess", "是否成功" },
115115
{ "Switch Language", "切换语言" },
116-
{ "Switch Timezone", "切换时区" }
116+
{ "Switch Timezone", "切换时区" },
117+
{ "Modify super admin is disabled, please modify website configuration",
118+
"网站已禁止修改超级管理员, 有需要请修改网站设置启用" },
119+
{ "Delete super admin is disabled, please modify website configuration",
120+
"网站已禁止删除超级管理员, 有需要请修改网站设置启用" },
117121
};
118122
}
119123
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using ZKWeb.Localize;
3+
using ZKWeb.MVVMPlugins.MVVM.Common.Base.src.Domain.Filters.Interfaces;
4+
using ZKWeb.MVVMPlugins.MVVM.Common.MultiTenant.src.Domain.Services;
5+
using ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Components.ExtraConfigKeys;
6+
using ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Domain.Entities;
7+
using ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Domain.Services;
8+
using ZKWeb.Server;
9+
using ZKWebStandard.Extensions;
10+
using ZKWebStandard.Ioc;
11+
12+
namespace ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Domain.Filters {
13+
/// <summary>
14+
/// 阻止修改超级管理员的密码, 或删除管理员
15+
/// </summary>
16+
[ExportMany, SingletonReuse]
17+
public class PreventModifySuperAdminFilter : IEntityOperationFilter
18+
{
19+
public bool PreventModifySuperAdmin { get; set; }
20+
21+
public PreventModifySuperAdminFilter()
22+
{
23+
var configManager = ZKWeb.Application.Ioc.Resolve<WebsiteConfigManager>();
24+
var extra = configManager.WebsiteConfig.Extra;
25+
PreventModifySuperAdmin = extra.GetOrDefault(
26+
OrganizationExtraConfigKeys.PreventModifySuperAdmin, false);
27+
}
28+
29+
void IEntityOperationFilter.FilterSave<TEntity, TPrimaryKey>(TEntity entity)
30+
{
31+
if (PreventModifySuperAdmin &&
32+
entity is User &&
33+
((User)(object)entity).OwnerTenant.Name == TenantManager.MasterTenantName &&
34+
((User)(object)entity).Username == AdminManager.SuperAdminName)
35+
{
36+
throw new NotSupportedException(
37+
new T("Modify super admin is disabled, please modify website configuration"));
38+
}
39+
}
40+
41+
void IEntityOperationFilter.FilterDelete<TEntity, TPrimaryKey>(TEntity entity)
42+
{
43+
if (PreventModifySuperAdmin &&
44+
entity is User &&
45+
((User)(object)entity).OwnerTenant.Name == TenantManager.MasterTenantName &&
46+
((User)(object)entity).Username == AdminManager.SuperAdminName) {
47+
throw new NotSupportedException(
48+
new T("Delete super admin is disabled, please modify website configuration"));
49+
}
50+
}
51+
}
52+
}

src/ZKWeb.MVVMPlugins/MVVM.Common.Organization/src/Domain/Services/AdminManager.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
1-
using System;
2-
using System.Linq;
3-
using ZKWeb.Localize;
1+
using System.Linq;
42
using ZKWeb.MVVMPlugins.MVVM.Common.Base.src.Components.Exceptions;
53
using ZKWeb.MVVMPlugins.MVVM.Common.Base.src.Domain.Services.Bases;
6-
using ZKWeb.MVVMPlugins.MVVM.Common.Base.src.Domain.Services.Interfaces;
74
using ZKWeb.MVVMPlugins.MVVM.Common.Base.src.Domain.Uow.Extensions;
85
using ZKWeb.MVVMPlugins.MVVM.Common.MultiTenant.src.Domain.Filters;
96
using ZKWeb.MVVMPlugins.MVVM.Common.MultiTenant.src.Domain.Services;
107
using ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Domain.Entities;
118
using ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Domain.Entities.Interfaces;
129
using ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Domain.Entities.UserTypes;
1310
using ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Domain.Extensions;
14-
using ZKWebStandard.Extensions;
11+
using ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Domain.Filters;
1512
using ZKWebStandard.Ioc;
16-
using ZKWebStandard.Web;
1713

1814
namespace ZKWeb.MVVMPlugins.MVVM.Common.Organization.src.Domain.Services
1915
{
@@ -26,11 +22,11 @@ public class AdminManager : DomainServiceBase
2622
/// <summary>
2723
/// 超级管理员的名称
2824
/// </summary>
29-
protected const string SuperAdminName = "admin";
25+
public const string SuperAdminName = "admin";
3026
/// <summary>
3127
/// 超级管理员的密码
3228
/// </summary>
33-
protected const string SuperAdminPassword = "123456";
29+
public const string SuperAdminPassword = "123456";
3430
/// <summary>
3531
/// 生成超级管理员时使用的锁
3632
/// </summary>
@@ -59,6 +55,7 @@ public virtual User EnsureSuperAdmin()
5955
{
6056
using (UnitOfWork.Scope())
6157
using (UnitOfWork.DisableFilter(typeof(OwnerTenantFilter)))
58+
using (UnitOfWork.DisableFilter(typeof(PreventModifySuperAdminFilter)))
6259
{
6360
var admin = GetSuperAdmin();
6461
if (admin != null)

src/ZKWeb.MVVMPlugins/MVVM.Common.Organization/src/Domain/Services/UserManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ public virtual void ChangePassword(Guid userId, string oldPassword, string newPa
242242
{
243243
using (UnitOfWork.Scope())
244244
{
245+
UnitOfWork.Context.BeginTransaction();
245246
var user = Get(userId);
246247
if (user == null)
247248
{
@@ -252,6 +253,7 @@ public virtual void ChangePassword(Guid userId, string oldPassword, string newPa
252253
throw new ForbiddenException("Incorrect old password");
253254
}
254255
Save(ref user, u => u.SetPassword(newPassword));
256+
UnitOfWork.Context.FinishTransaction();
255257
}
256258
}
257259

0 commit comments

Comments
 (0)