예제 #1
0
        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());
        }
예제 #2
0
        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);
        }
예제 #4
0
        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))}");
            }
        }