Я хочу создать динамическое разрешение.
Информация отправляется со стороны клиента и оценивается в действии, если каждое из действий, содержащихся в списке, отправленном как от клиента, так и из базы данных, игнорируется и удаляется из списка.
Клиент отправляет как эта информация:
0:
Actions: Array(4)
0: {ActionId: 100663387}
1: {ActionId: 100663388}
2: {ActionId: 100663389}
3: {ActionId: 100663390}
controllerID: "35ba32ce-f980-3b9d-a38b-3ca854dcb063"
roleId: 1004
1:
Actions: Array(2)
0: {ActionId: 100663395}
1: {ActionId: 100663395}
controllerID: "9a722402-cc69-3ad0-a24e-f1f166a46880"
roleId: 1004
и в ASP.NET Core:
[HttpPost("[action]")]
public async void AddClaim(List<RecAccessLevel> model, CancellationToken cancellationToken)
{
foreach (var item in model)
{
var CurrentActions = roleClaimService.TableAsNoTracking
.Where(x => x.RoleId == item.RoleId && x.ControllerId == item.ControllerID)
.Select(r => new Action
{
ActionId = r.ActionId
}).ToList();
var newActionToAdd = item.Actions.Except(CurrentActions).ToList();
foreach (var itemAdd in newActionToAdd)
{
await roleClaimService.AddAsync(new RoleClaim
{
ActionId = itemAdd.ActionId,
ControllerId = item.ControllerID,
RoleId = item.RoleId,
ClaimType = "DynamicPemission",
ClaimValue = string.Format($"{item.RoleId}:{item.ControllerID}:{itemAdd.ActionId}")
}, cancellationToken);
}
}
}
Проблема в том, что когда я использую метод, он не игнорирует сопоставленные данные
public class RecAccessLevel
{
public string ControllerID { get; set; }
public int RoleId { get; set; }
public IEnumerable<Action> Actions { get; set; }
}
public class Action
{
public int ActionId { get; set; }
}