Как получить параметры ввода пользователя в моем требовании политики авторизации в ASP.NET Core 5.0?C#

Место общения программистов C#
Ответить
Anonymous
 Как получить параметры ввода пользователя в моем требовании политики авторизации в ASP.NET Core 5.0?

Сообщение Anonymous »

Я хочу разрешить пользователям видеть только свои собственные ресурсы (например, Audits Entity). Итак, в AuditController у меня есть:
[MyAuthorize(Policy = nameof(ValidUserToSeeAuditAuthorizationHandler))]
[HttpGet]
public async Task GetByIdAsync(Guid id)
{
// my business to fetch the audit info based by its id
// ...
return result;
}

Затем я создал свои требования и AuthorizationHandler Классы:
public class ValidUserToSeeAuditRequirment : IAuthorizationRequirement
{
public ValidUserToSeeAuditRequirment(Guid auditId)
{
auditId = auditId;
}

public Guid AuditId { get; }
}

public class ValidUserToSeeAuditAuthorizationHandler : AuthorizationHandler
{
private readonly AppUserManager _userManager;
private readonly IUnitOfWork _appDbContext;

public ValidUserToSeeAuditAuthorizationHandler(AppUserManager userManager, IUnitOfWork appDbContext)
{
_userManager = userManager;
_appDbContext = appDbContext;
}

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ValidUserToSeeAuditRequirment requirement)
{
if (!context.User.IsAuthenticated())
{
context.Fail();
return Task.CompletedTask;
}

var theAudit = _appDbContext.Set().SingleOrDefault(x => x.Id == requirement.AuditId);
var authenticatedUserId = Convert.ToInt32(context.User.GetSubjectId());

// If the authenticated user created the audit, then he/she is valid to see it
if (theAudit.SubjectauthenticatedUserId == authenticatedUserId)
{
// valid
context.Succeed(requirement);
return Task.CompletedTask;
}

// he/she is not authorized to see the resource (audit)
context.Fail();
return Task.CompletedTask;
}
}

Но в классе запуска я хочу настроить политики авторизации. Как настроить класс моего требования , чтобы получить параметры ввода пользователя из метода действия контроллера?
services.AddAuthorization(options =>
{
// another policies
// ...

options.AddPolicy(name: nameof(ValidUserToSeeAuditAuthorizationHandler),
policy =>
{
policy.RequireAuthenticatedUser();
policy.AddRequirements(new ValidUserToSeeAuditRequirment( /****** HERE, how to pass the controller action method parameters ******/));
});
});

services.AddTransient();


Подробнее здесь: https://stackoverflow.com/questions/653 ... t-in-asp-n
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»