Exemple #1
0
        public async Task <RolePermissionsDTO> GetPermissionsAsync(string id)
        {
            var entity = await _dbContext.Roles.FirstOrDefaultAsync(x => x.Id == id);

            if (entity == null)
            {
                throw new ArgumentException("Role not exists");
            }

            var result = new RolePermissionsDTO {
                Role = entity.Name, Services = new List <ServicePermissionsDTO>()
            };

            var permissions = await _dbContext.Permissions.Include(x => x.Service).Where(x => !x.Expired).ToListAsync();

            var dict = await _dbContext.RolePermissions.Where(x => x.RoleId == id)
                       .ToDictionaryAsync(x => x.PermissionId, x => x);

            var permissionsGroupByService = permissions.GroupBy(x => x.Service.Name);

            foreach (var service in permissionsGroupByService)
            {
                var servicePermissionsDto =
                    new ServicePermissionsDTO {
                    Service = service.Key, Groups = new List <GroupPermissionDTO>()
                };
                var servicePermissions = service.ToList();
                var groups             = servicePermissions.GroupBy(x => x.Module);

                foreach (var group in groups)
                {
                    var groupPermission = new GroupPermissionDTO
                    {
                        Permissions = new List <GrantPermissionDTO>(), Module = group.Key
                    };

                    foreach (var permission in group)
                    {
                        groupPermission.Permissions.Add(new GrantPermissionDTO
                        {
                            Name          = permission.Name,
                            Id            = permission.Id,
                            HasPermission = dict.ContainsKey(permission.Id)
                        });
                    }

                    servicePermissionsDto.Groups.Add(groupPermission);
                }

                result.Services.Add(servicePermissionsDto);
            }

            return(result);
        }
Exemple #2
0
        public async Task <UserPermissionsDTO> GetPermissionsAsync(string userId)
        {
            var entity = await _dbContext.Users.FirstOrDefaultAsync(x => x.Id == userId);

            if (entity == null)
            {
                throw new ArgumentException("User not exists");
            }

            var claims = await _userManager.GetClaimsAsync(entity);

            var givenName  = claims.FirstOrDefault(x => x.Type == JwtRegisteredClaimNames.GivenName)?.Value;
            var familyName = claims.FirstOrDefault(x => x.Type == JwtRegisteredClaimNames.FamilyName)?.Value;
            var result     = new UserPermissionsDTO
            {
                UserName = entity.UserName,
                Name     = $"{familyName}{givenName}",
                Email    = entity.Email,
                Services = new List <ServicePermissionsDTO>()
            };

            var permissions = await _dbContext.Permissions.Include(x => x.Service).ToListAsync();

            var dict = await _dbContext.UserPermissions.Where(x => x.UserId == userId)
                       .ToDictionaryAsync(x => x.PermissionId, x => x);

            var permissionsGroupByService = permissions.GroupBy(x => x.Service.Name);

            foreach (var service in permissionsGroupByService)
            {
                var servicePermissionsDto =
                    new ServicePermissionsDTO {
                    Service = service.Key, Groups = new List <GroupPermissionDTO>()
                };
                var servicePermissions = service.ToList();
                var groups             = servicePermissions.GroupBy(x => x.Module);

                foreach (var group in groups)
                {
                    var groupPermission = new GroupPermissionDTO
                    {
                        Permissions = new List <GrantPermissionDTO>(), Module = group.Key
                    };

                    foreach (var permission in group)
                    {
                        groupPermission.Permissions.Add(new GrantPermissionDTO
                        {
                            Name          = permission.Name,
                            Id            = permission.Id,
                            HasPermission = dict.ContainsKey(permission.Id)
                        });
                    }

                    servicePermissionsDto.Groups.Add(groupPermission);
                }

                result.Services.Add(servicePermissionsDto);
            }

            return(result);
        }