Skip to content

Commit 7a3358c

Browse files
committed
always grant all permissions to admin users during seed
otherwise when new permissions are added later, the current admins don't get those new permissions granted
1 parent 8eb2944 commit 7a3358c

File tree

2 files changed

+51
-37
lines changed

2 files changed

+51
-37
lines changed

aspnet-core/src/AbpCompanyName.AbpProjectName.EntityFrameworkCore/EntityFrameworkCore/Seed/Host/HostRoleAndUserCreator.cs

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,33 @@ private void CreateHostRoleAndUsers()
3535
_context.SaveChanges();
3636
}
3737

38+
// Grant all permissions to admin role for host
39+
40+
var grantedPermissions = _context.Permissions.IgnoreQueryFilters()
41+
.OfType<RolePermissionSetting>()
42+
.Where(p => p.TenantId == null && p.RoleId == adminRoleForHost.Id)
43+
.Select(p => p.Name)
44+
.ToList();
45+
46+
var permissions = PermissionFinder
47+
.GetAllPermissions(new AbpProjectNameAuthorizationProvider())
48+
.Where(p => p.MultiTenancySides.HasFlag(MultiTenancySides.Host) &&
49+
!grantedPermissions.Contains(p.Name))
50+
.ToList();
51+
52+
if (permissions.Any())
53+
{
54+
_context.Permissions.AddRange(
55+
permissions.Select(permission => new RolePermissionSetting
56+
{
57+
TenantId = null,
58+
Name = permission.Name,
59+
IsGranted = true,
60+
RoleId = adminRoleForHost.Id
61+
}));
62+
_context.SaveChanges();
63+
}
64+
3865
// Admin user for host
3966

4067
var adminUserForHost = _context.Users.IgnoreQueryFilters().FirstOrDefault(u => u.TenantId == null && u.UserName == AbpUserBase.AdminUserName);
@@ -61,26 +88,6 @@ private void CreateHostRoleAndUsers()
6188
_context.UserRoles.Add(new UserRole(null, adminUserForHost.Id, adminRoleForHost.Id));
6289
_context.SaveChanges();
6390

64-
// Grant all permissions
65-
var permissions = PermissionFinder
66-
.GetAllPermissions(new AbpProjectNameAuthorizationProvider())
67-
.Where(p => p.MultiTenancySides.HasFlag(MultiTenancySides.Host))
68-
.ToList();
69-
70-
foreach (var permission in permissions)
71-
{
72-
_context.Permissions.Add(
73-
new RolePermissionSetting
74-
{
75-
TenantId = null,
76-
Name = permission.Name,
77-
IsGranted = true,
78-
RoleId = adminRoleForHost.Id
79-
});
80-
}
81-
82-
_context.SaveChanges();
83-
8491
// User account of admin user
8592
_context.UserAccounts.Add(new UserAccount
8693
{
@@ -89,7 +96,6 @@ private void CreateHostRoleAndUsers()
8996
UserName = AbpUserBase.AdminUserName,
9097
EmailAddress = adminUserForHost.EmailAddress
9198
});
92-
9399
_context.SaveChanges();
94100
}
95101
}

aspnet-core/src/AbpCompanyName.AbpProjectName.EntityFrameworkCore/EntityFrameworkCore/Seed/Tenants/TenantRoleAndUserBuilder.cs

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,33 @@ private void CreateRolesAndUsers()
3737
{
3838
adminRole = _context.Roles.Add(new Role(_tenantId, StaticRoleNames.Tenants.Admin, StaticRoleNames.Tenants.Admin) { IsStatic = true }).Entity;
3939
_context.SaveChanges();
40+
}
4041

41-
// Grant all permissions to admin role
42-
var permissions = PermissionFinder
43-
.GetAllPermissions(new AbpProjectNameAuthorizationProvider())
44-
.Where(p => p.MultiTenancySides.HasFlag(MultiTenancySides.Tenant))
45-
.ToList();
42+
// Grant all permissions to admin role
4643

47-
foreach (var permission in permissions)
48-
{
49-
_context.Permissions.Add(
50-
new RolePermissionSetting
51-
{
52-
TenantId = _tenantId,
53-
Name = permission.Name,
54-
IsGranted = true,
55-
RoleId = adminRole.Id
56-
});
57-
}
44+
var grantedPermissions = _context.Permissions.IgnoreQueryFilters()
45+
.OfType<RolePermissionSetting>()
46+
.Where(p => p.TenantId == _tenantId && p.RoleId == adminRole.Id)
47+
.Select(p => p.Name)
48+
.ToList();
49+
50+
var permissions = PermissionFinder
51+
.GetAllPermissions(new AbpProjectNameAuthorizationProvider())
52+
.Where(p => p.MultiTenancySides.HasFlag(MultiTenancySides.Tenant) &&
53+
!grantedPermissions.Contains(p.Name))
54+
.ToList();
5855

56+
if (permissions.Any())
57+
{
58+
_context.Permissions.AddRange(
59+
permissions.Select(permission => new RolePermissionSetting
60+
{
61+
TenantId = _tenantId,
62+
Name = permission.Name,
63+
IsGranted = true,
64+
RoleId = adminRole.Id
65+
})
66+
);
5967
_context.SaveChanges();
6068
}
6169

0 commit comments

Comments
 (0)