Оформить заявку this page в документации по основному компоненту ASP.NET. Его несколько похоже на то, что cancan делает.
Вы пишете Authorization Handler следующим образом:
public class DocumentAuthorizationHandler :
AuthorizationHandler<OperationAuthorizationRequirement, Document>
{
public override Task HandleRequirementAsync(AuthorizationHandlerContext context,
OperationAuthorizationRequirement requirement,
Document resource)
{
// Validate the operation using the resource, the identity and
// the Name property value from the requirement.
return Task.CompletedTask;
}
}
Теперь вы можете использовать следующий код в контроллерах:
if (await authorizationService.AuthorizeAsync(User, document, Operations.Read))
{
return View(document);
}
else
{
return new ChallengeResult();
}
или в ваших просмотров:
@if (await AuthorizationService.AuthorizeAsync(User, Model, Operations.Edit))
{
<p><a class="btn btn-default" role="button"
href="@Url.Action("Edit", "Document", new { id = Model.Id })">Edit</a></p>
}
ли вам когда-либо найти хорошую реализацию авторизации на основе деятельности? – GraemeMiller
нет, к сожалению, я этого не сделал. В результате я написал специальный атрибут Authorize. Дайте мне знать, если вы найдете хорошую реализацию. – Karan