private Result <List <AppPermission> > GetMatchingPermissions(
            IAppPermissionRepository permissionRepo,
            string[] permissionNames
            )
        {
            if (permissionRepo == null)
            {
                return(Result.Fail <List <AppPermission> >("Permission repo is not specified"));
            }

            if (permissionNames == null)
            {
                return(Result.Fail <List <AppPermission> >("No permissions are specified"));
            }

            permissionNames = permissionNames.Select(d => d.Trim().ToUpper()).Distinct().ToArray();

            List <AppPermission> permissions = permissionRepo.GetList().ToList();
            List <AppPermission> result      = new List <AppPermission>();

            foreach (var name in permissionNames)
            {
                Maybe <AppPermission> permission = permissions.FirstOrDefault(d => d.Name.ToUpper() == name);
                if (permission.HasNoValue)
                {
                    return(Result.Fail <List <AppPermission> >($"No matching permission found: {name}"));
                }

                result.Add(permission.Value);
            }

            return(Result.Ok(result));
        }
        public IActionResult GetNotAssignedPermissions([FromQuery] int id)
        {
            if (!_currentUser.HasRole(Permission.UserAccountAdmin))
            {
                return(Forbidden());
            }

            _logger.LogInformation("Retrieving not assigned permissions list for user group: {0}", id);

            Maybe <AppGroup> userGroup = _groupRepo.GetById(id);

            if (userGroup.HasNoValue)
            {
                return(Error($"No matching user group found: {id}"));
            }

            List <AppPermission> permissions         = _permissionRepo.GetList().ToList();
            List <int>           assignedPermissions = userGroup.Value.GroupPermissions.Select(d => d.PermissionId).ToList();

            var result = permissions
                         .Where(p => !assignedPermissions.Any(d => d == p.Id)) // exclude already assigned permissions to specified group
                         .Join(EnumInfo.GetList <Permission>().ToList(), p => p.Name, all => all.Name, (p, all) => new { p, all })
                         .Select(d => new PermissionDTO
            {
                Id          = d.p.Id,
                Name        = d.p.Name,
                Description = d.p.Description,
                Group       = d.all.Group,
                Active      = true
            });

            return(Ok(result, contextReadonly: true));
        }
Exemple #3
0
        public IActionResult GetList()
        {
            if (!_currentUser.HasRole(Permission.UserAccountAdmin))
            {
                return(Forbidden());
            }

            _logger.LogInformation("Retrieving system modules permission list");

            List <EnumDescription> permissions       = EnumInfo.GetList <Permission>().ToList();
            List <AppPermission>   activePermissions = _permissionRepo.GetList().ToList();

            var result = permissions.GroupJoin(
                activePermissions,
                all => all.Name,
                active => active.Name,
                (all, active) => new
            {
                all,
                active = (Maybe <AppPermission>)active.FirstOrDefault()
            })
                         .Select(d => new PermissionDTO
            {
                Id          = d.active.HasValue ? d.active.Unwrap(p => p.Id) : default(int?),
                Name        = d.all.Name,
                Description = d.all.Description,
                Group       = d.all.Group,
                Active      = d.active.HasValue
            });


            return(Ok(result, contextReadonly: true));
        }