public bool IsPrimaryAuthorityForRole(string userId, ApprovalAuthorityRole role)
        {
            if (role == ApprovalAuthorityRole.Supervisor)
            {
                return(true);
            }

            return(_formOptions.Authorities.TryGetValue(role, out var authorityIds) && authorityIds.FirstOrDefault() == userId);
        }
        public virtual bool IsAuthorityApplicable(Proposal proposal, ApprovalAuthorityRole authorityRole)
        {
            if (!ApprovalRoles.Contains(authorityRole))
            {
                throw new ArgumentOutOfRangeException(nameof(authorityRole));
            }

            return(true);
        }
        public IEnumerable <string> GetAuthorityIdsForRole(Proposal proposal, ApprovalAuthorityRole role)
        {
            if (role == ApprovalAuthorityRole.Supervisor)
            {
                return(proposal.SupervisorId.Yield());
            }

            return(_formOptions.Authorities.TryGetValue(role, out var authorityIds)
                ? authorityIds
                : Enumerable.Empty <string>());
        }
        public override bool IsAuthorityApplicable(Proposal proposal, ApprovalAuthorityRole authorityRole)
        {
            var hasAnyMri      = proposal.Labs.Any(l => _labProvider.Labs[l.Modality].IsMri);
            var hasAnyNonMri   = proposal.Labs.Any(l => !_labProvider.Labs[l.Modality].IsMri);
            var hasCustomQuota = proposal.CustomQuota;

            return(authorityRole switch
            {
                ApprovalAuthorityRole.LabMri => hasAnyMri,
                ApprovalAuthorityRole.LabOther => hasAnyNonMri,
                ApprovalAuthorityRole.LabData => hasCustomQuota || !(hasAnyMri || hasAnyNonMri),
                _ => throw new ArgumentOutOfRangeException(nameof(authorityRole), authorityRole, null)
            });
 public bool HasApprovalAuthorityRole(ApprovalAuthorityRole role)
 {
     return(ApprovalRoles.Contains(role));
 }
        public async Task <ProjectDbUser> GetPrimaryAuthorityForRoleAsync(Proposal proposal, ApprovalAuthorityRole role)
        {
            var authorityId = GetPrimaryAuthorityId(proposal, role);

            return(authorityId == null ? null : await _userManager.GetUserByIdAsync(authorityId));
        }
 public Task <ICollection <ProjectDbUser> > GetAuthoritiesByRoleAsync(Proposal proposal, ApprovalAuthorityRole role)
 {
     return(_userManager.GetUsersByIdsAsync(GetAuthorityIdsForRole(proposal, role)));
 }
 public string GetPrimaryAuthorityId(Proposal proposal, ApprovalAuthorityRole role)
 {
     return(GetAuthorityIdsForRole(proposal, role).FirstOrDefault());
 }
 public bool IsInApprovalRole(ClaimsPrincipal principal, ApprovalAuthorityRole role)
 {
     return(GetApprovalRoles(principal).Contains(role));
 }