如何在简单方法上使用 auth 属性? Asp.net Core C#

问题描述 投票:0回答:2

如何在简单方法上使用授权属性,当我说简单方法时,意味着不是在控制器或页面方法上,而是真正简单的方法

大家好,我需要检查用户的访问权限,在内部服务的方法中,如何实现?

对于控制器或页面我们可以简单地使用授权属性,但是对于我们应用程序的内部服务该怎么办? 就像我有一个家庭控制器,并且在从应用程序层中的服务获取调用方法时,我想检查该用户对此服务是否有足够的权限,然后执行操作

正如我所说,我们可以在 Razor 的控制器或操作或页面上使用 Athorize 属性,但是我们的简单方法或类怎么样,我们可以检查那里的权限吗

c# asp.net-core authorization
2个回答
0
投票

从服务内部,您应该像这样进行授权

var isAuthenticated = httpContext?.User?.Identity?.IsAuthenticated ?? false;

要从自定义组件访问上述 httpContext,您应该使用 IHttpContextAccessor

要使用它,您必须添加 services.AddHttpContextAccessor();到启动文件的configurationServices。

下面是使用 IHttpContextAccessor 的示例

public class UserRepository : IUserRepository
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public UserRepository(IHttpContextAccessor httpContextAccessor) =>
        _httpContextAccessor = httpContextAccessor;

    public void LogCurrentUser()
    {
        var username = _httpContextAccessor.HttpContext.User.Identity.Name;

        // ...
    }
}

0
投票

您正在尝试进行基于资源的授权

假设您已经制定了政策,您可以使用

AuthorizeAsync
 中的 
IAuthorizationService

方法

对于这个例子,假设我们正在尝试检查用户是否具有编辑文档的编辑权限

    public async Task<IActionResult> OnGetAsync(Guid documentId)
{
    Document = _documentRepository.Find(documentId);

    if (Document == null)
    {
        return new NotFoundResult();
    }

    var authorizationResult = await _authorizationService
            .AuthorizeAsync(User, Document, "EditPolicy");

    if (authorizationResult.Succeeded)
    {
        //Call your service here
    }
    else
    {
        //This user don't have access
    }
}

请参阅文档了解更多详细信息

© www.soinside.com 2019 - 2024. All rights reserved.