好吧,您指的是Module Zero文档,但没有使用Module Zero。
如果您不存储用户,则存储用户权限可能没有意义。
你可以实现 IPermissionChecker 检查声明的权限。
IPermissionChecker
public class PermissionChecker : IPermissionChecker, ITransientDependency { private readonly IHttpContextAccessor _httpContextAccessor; public PermissionChecker(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public async Task<bool> IsGrantedAsync(string permissionName) { // Get user var user = _httpContextAccessor.HttpContext.User; // Get claims of type "role" var roleClaims = user.Claims.Where(claim => claim.Type == "role"); // Check for applicable permission based on role permissions // ... } public Task<bool> IsGrantedAsync(UserIdentifier user, string permissionName) { return IsGrantedAsync(permissionName); } }
以来 AuthorizationHelper 检查 AbpSession.UserId ,你必须覆盖它的方法。
AuthorizationHelper
AbpSession.UserId
public class NonUserAuthorizationHelper : AuthorizationHelper { private readonly IAuthorizationConfiguration _authConfiguration public NonUserAuthorizationHelper(IFeatureChecker featureChecker, IAuthorizationConfiguration authConfiguration) : base(featureChecker, authConfiguration) { _authConfiguration = authConfiguration; } public override async Task AuthorizeAsync(IEnumerable<IAbpAuthorizeAttribute> authorizeAttributes) { if (!_authConfiguration.IsEnabled) { return; } // if (!AbpSession.UserId.HasValue) // { // throw new AbpAuthorizationException( // LocalizationManager.GetString(AbpConsts.LocalizationSourceName, "CurrentUserDidNotLoginToTheApplication") // ); // } foreach (var authorizeAttribute in authorizeAttributes) { await PermissionChecker.AuthorizeAsync(authorizeAttribute.RequireAllPermissions, authorizeAttribute.Permissions); } } }
然后将其替换为 PreInitialize 你的方法 *.Core 模块。
PreInitialize
*.Core
// using Abp.Configuration.Startup; public override void PreInitialize() { Configuration.ReplaceService<IAuthorizationHelper, NonUserAuthorizationHelper>(); }