private async Task <IEnumerable <Claim> > getProjectRoleClaims(string projectName, string userName) { var user = await _userManager.FindByNameAsync(userName); if (user == null) { return(null); } string claimType = ProjectRoles.GetClaimType(projectName); return((await _userManager.GetClaimsAsync(user)).Where(ll => ll.Type == claimType).ToList()); }
private async Task <Claim> getProjectRoleClaim(string projectName, string userName, eProjectRoles role) { var user = await _userManager.FindByNameAsync(userName); if (user == null) { return(null); } string claimType = ProjectRoles.GetClaimType(projectName); var foo = await _userManager.GetClaimsAsync(user); return(foo.FirstOrDefault(ll => ll.Type == claimType && ll.Value == role.ToString())); }
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ProjectRoleAuthRequirement requirement, ProjectRoleAuthResource resource) { if (resource == null) { return(Task.CompletedTask); } if (context.User.Identity.Name == resource.Author) { context.Succeed(requirement); } else if (context.User.HasClaim(claim => claim.Type == ProjectRoles.GetClaimType(resource.ProjectName) && claim.Value == requirement.ProjectRole.ToString())) { context.Succeed(requirement); } return(Task.CompletedTask); }
private async Task innerSetProjectRole(string projectName, string userName, eProjectRoles role) { var user = await _userManager.FindByNameAsync(userName); if (user == null) { throw new Exception($"User {userName} does not exist."); } var foo = await getProjectRoleClaim(projectName, userName, role); if (foo != null) { return; } string claimType = ProjectRoles.GetClaimType(projectName); var identityResult = await _userManager.AddClaimAsync(user, new Claim(claimType, role.ToString())); if (!identityResult.Succeeded) { throw new Exception($"Error at removeProjectRole. Project: {projectName}, user: {userName}, role: {role} Errors: {string.Join(',', identityResult.Errors.Select(ll => ll.Description))}"); } }