fix #2624 - permission grid behavior issues

This commit is contained in:
Shaun Walker 2023-03-06 12:20:20 -05:00
parent 7871f0f3ce
commit 1f29f77f66
2 changed files with 33 additions and 38 deletions

View File

@ -106,7 +106,7 @@
public string PermissionNames { get; set; } public string PermissionNames { get; set; }
[Parameter] [Parameter]
public string Permissions { get; set; } public string Permissions { get; set; } // deprecated - use PermissionList instead
[Parameter] [Parameter]
public List<Permission> PermissionList { get; set; } public List<Permission> PermissionList { get; set; }
@ -138,6 +138,22 @@
// initialize permissions // initialize permissions
_permissions = new List<Permission>(); _permissions = new List<Permission>();
if (PermissionList.Any())
{
foreach (var permission in PermissionList)
{
_permissions.Add(permission);
if (permission.UserId != null)
{
if (!_users.Any(item => item.UserId == permission.UserId.Value))
{
_users.Add(await UserService.GetUserAsync(permission.UserId.Value, ModuleState.SiteId));
}
}
}
}
else
{
foreach (string permissionname in _permissionnames) foreach (string permissionname in _permissionnames)
{ {
// permission names can be in the form of "EntityName:PermissionName:Roles" // permission names can be in the form of "EntityName:PermissionName:Roles"
@ -162,24 +178,6 @@
_permissions.Add(new Permission(EntityName, permissionname, RoleNames.Admin, null, true)); _permissions.Add(new Permission(EntityName, permissionname, RoleNames.Admin, null, true));
} }
} }
// populate permissions and users
if (PermissionList.Any())
{
foreach (var permission in PermissionList)
{
if (!_permissions.Any(item => item.EntityName == permission.EntityName && item.PermissionName == permission.PermissionName && item.Role.Name == permission.Role.Name))
{
_permissions.Add(permission);
}
if (permission.UserId != null)
{
if (!_users.Any(item => item.UserId == permission.UserId.Value))
{
_users.Add(await UserService.GetUserAsync(permission.UserId.Value, ModuleState.SiteId));
}
}
}
} }
} }
@ -246,7 +244,7 @@
if (roleName != "") if (roleName != "")
{ {
var permission = _permissions.FirstOrDefault(item => item.EntityName == GetEntityName(permissionName) && item.PermissionName == GetPermissionName(permissionName) && item.Role.Name == roleName); var permission = _permissions.FirstOrDefault(item => item.EntityName == GetEntityName(permissionName) && item.PermissionName == GetPermissionName(permissionName) && item.Role.Name == roleName);
if (permission == null) if (permission != null)
{ {
_permissions.Remove(permission); _permissions.Remove(permission);
} }
@ -258,7 +256,7 @@
else else
{ {
var permission = _permissions.FirstOrDefault(item => item.EntityName == GetEntityName(permissionName) && item.PermissionName == GetPermissionName(permissionName) && item.UserId == userId); var permission = _permissions.FirstOrDefault(item => item.EntityName == GetEntityName(permissionName) && item.PermissionName == GetPermissionName(permissionName) && item.UserId == userId);
if (permission == null) if (permission != null)
{ {
_permissions.Remove(permission); _permissions.Remove(permission);
} }
@ -309,7 +307,7 @@
{ {
// remove deny all users, unauthenticated, and registered users // remove deny all users, unauthenticated, and registered users
var permissions = _permissions.Where(item => !item.IsAuthorized && var permissions = _permissions.Where(item => !item.IsAuthorized &&
(item.Role.Name == RoleNames.Everyone || item.Role.Name == RoleNames.Unauthenticated || item.Role.Name == RoleNames.Registered)); (item.Role.Name == RoleNames.Everyone || item.Role.Name == RoleNames.Unauthenticated || item.Role.Name == RoleNames.Registered)).ToList();
foreach (var permission in permissions) foreach (var permission in permissions)
{ {
_permissions.Remove(permission); _permissions.Remove(permission);
@ -318,7 +316,7 @@
{ {
// remove deny administrators and host users // remove deny administrators and host users
permissions = _permissions.Where(item => !item.IsAuthorized && permissions = _permissions.Where(item => !item.IsAuthorized &&
(item.Role.Name == RoleNames.Admin || item.Role.Name == RoleNames.Host)); (item.Role.Name == RoleNames.Admin || item.Role.Name == RoleNames.Host)).ToList();
foreach (var permission in permissions) foreach (var permission in permissions)
{ {
_permissions.Remove(permission); _permissions.Remove(permission);

View File

@ -1,13 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Text.Json;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Oqtane.Models; using Oqtane.Models;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Oqtane.Infrastructure; using Oqtane.Infrastructure;
using Oqtane.Modules.Admin.Users;
namespace Oqtane.Repository namespace Oqtane.Repository
{ {