检查声明中的ABP权限


我头上有犄角
2025-03-10 11:41:50 (5天前)
  1. 我正在使用ABP版本3.9 for ASP.NET Core。我们有一个现有的Identity Server 4实例,它以声明的形式提供角色信息(通过OIDC)。我想加入ABP的权限......

2 条回复
  1. 0# 老夫的少女心 | 2019-08-31 10-32



    好吧,您指的是Module Zero文档,但没有使用Module Zero。



    如果您不存储用户,则存储用户权限可能没有意义。



    你可以实现

    IPermissionChecker

    检查声明的权限。




    1. public class PermissionChecker : IPermissionChecker, ITransientDependency
      {
      private readonly IHttpContextAccessor _httpContextAccessor;

    2. public PermissionChecker(IHttpContextAccessor httpContextAccessor)
    3. {
    4.     _httpContextAccessor = httpContextAccessor;
    5. }
    6. public async Task<bool> IsGrantedAsync(string permissionName)
    7. {
    8.     // Get user
    9.     var user = _httpContextAccessor.HttpContext.User;
    10.     // Get claims of type "role"
    11.     var roleClaims = user.Claims.Where(claim => claim.Type == "role");
    12.     // Check for applicable permission based on role permissions
    13.     // ...
    14. }
    15. public Task<bool> IsGrantedAsync(UserIdentifier user, string permissionName)
    16. {
    17.     return IsGrantedAsync(permissionName);
    18. }
    19. }

    20. </code>


    以来

    AuthorizationHelper

    检查

    AbpSession.UserId

    ,你必须覆盖它的方法。




    1. public class NonUserAuthorizationHelper : AuthorizationHelper
      {
      private readonly IAuthorizationConfiguration _authConfiguration

    2. public NonUserAuthorizationHelper(IFeatureChecker featureChecker, IAuthorizationConfiguration authConfiguration)
    3.     : base(featureChecker, authConfiguration)
    4. {
    5.     _authConfiguration = authConfiguration;
    6. }
    7. public override async Task AuthorizeAsync(IEnumerable<IAbpAuthorizeAttribute> authorizeAttributes)
    8. {
    9.     if (!_authConfiguration.IsEnabled)
    10.     {
    11.         return;
    12.     }
    13.     // if (!AbpSession.UserId.HasValue)
    14.     // {
    15.     //     throw new AbpAuthorizationException(
    16.     //         LocalizationManager.GetString(AbpConsts.LocalizationSourceName, "CurrentUserDidNotLoginToTheApplication")
    17.     //     );
    18.     // }
    19.     foreach (var authorizeAttribute in authorizeAttributes)
    20.     {
    21.         await PermissionChecker.AuthorizeAsync(authorizeAttribute.RequireAllPermissions, authorizeAttribute.Permissions);
    22.     }
    23. }
    24. }

    25. </code>


    然后将其替换为

    PreInitialize

    你的方法

    *.Core

    模块。




    1. // using Abp.Configuration.Startup;

    2. public override void PreInitialize()
      {
      Configuration.ReplaceService();
      }

    3. </code>

登录 后才能参与评论