public async Task AddOrUpdateGranularPermission(GranularPermission granularPermission)
        {
            var idParts = SplitGranularPermissionId(granularPermission.Id);

            var user = await _authorizationDbContext.Users
                       .Include(u => u.UserPermissions)
                       .ThenInclude(up => up.Permission)
                       .SingleOrDefaultAsync(u => u.IdentityProvider.Equals(idParts[1], StringComparison.OrdinalIgnoreCase) &&
                                             u.SubjectId.Equals(idParts[0], StringComparison.OrdinalIgnoreCase) &&
                                             !u.IsDeleted);

            if (user == null)
            {
                user = new EntityModels.User
                {
                    IdentityProvider = idParts[1],
                    SubjectId        = idParts[0],
                    Name             = $"{idParts[1]}\\{idParts[0]}"
                };
                _authorizationDbContext.Users.Add(user);
            }

            // remove all current permissions first and then replace them with the new set of permissions
            var currentUserPermissions = user.UserPermissions.Where(up => !up.IsDeleted);

            foreach (var userPermission in currentUserPermissions)
            {
                userPermission.IsDeleted = true;
            }

            await _authorizationDbContext.UserPermissions.AddRangeAsync(granularPermission.AdditionalPermissions.Select(
                                                                            ap => new UserPermission
            {
                SubjectId        = user.SubjectId,
                IdentityProvider = user.IdentityProvider,
                PermissionId     = ap.Id,
                PermissionAction = PermissionAction.Allow
            }));

            await _authorizationDbContext.UserPermissions.AddRangeAsync(granularPermission.DeniedPermissions.Select(
                                                                            dp => new UserPermission
            {
                SubjectId        = user.SubjectId,
                IdentityProvider = user.IdentityProvider,
                PermissionId     = dp.Id,
                PermissionAction = PermissionAction.Deny
            }));

            await _authorizationDbContext.SaveChangesAsync();
        }
示例#2
0
 public static Domain.Models.User ToModel(this EntityModels.User entity)
 {
     return(entity == null ? null : Mapper.Map <Domain.Models.User>(entity));
 }
示例#3
0
 public static void ToEntity(this Domain.Models.User model, EntityModels.User entity)
 {
     Mapper.Map(model, entity);
 }