我的应用程序将拥有可以申请加入组织的用户。作为组织的成员,您可以获得管理组织部分的权限,例如edit-membership-status。此权限仅适用于此组织。该应用程序将不是多租户,用户将有一个登录,但可以是多个组织的成员。
我正在使用带有实体框架和身份的.Net core 2.0。我设法设置用户,角色,声明和roleclaims。我已经将一个organisationId添加到IdentityRole并扩展了IsInRole,以检查该角色是否属于正确的组织。
public static bool IsInRole(this ClaimsPrincipal user, Role role, Guid
organisationId)
{
var isInRole = user.IsInRole(role.Name);
var isCorrectOrganisation = (organisationId == role.OrganisationId);
return isInRole && isCorrectOrganisation;
}
这允许我检查用户是否在角色和组织中。但是,我希望使用更细粒度的方法和权限。我可以为角色添加声明,即CanEdit - MembershipStatus。此声明被添加到ClaimsPrincipal,但不包含与持有声明的角色相关的organisationId的信息。
如何使用角色声明来检查仅限于所选组织的权限? 我正在使用授权服务的授权处理程序和要求来检查权限。在这种情况下,检查是否允许用户从提供的成员资格中读取。
var isAuthorizedRead = await _authorizationService.AuthorizeAsync(
User, membership,
CRUDOperations.Read);