예제 #1
0
        public IUser Store(IUser user)
        {
            if (!WriteUsersEnabled)
            {
                throw new Exception("Storing not enabled");
            }
            var writeable = ResolveWriteableStore(user);

            if (null == writeable)
            {
                throw new Exception("no target source to use as store");
            }
            if (!writeable.WriteUsersEnabled)
            {
                throw new Exception("requested storage not enabled");
            }
            var realuser = writeable.Store(user);

            if (null != _userCache)
            {
                _userCache.Clear();
                _userCache.Refresh(false);
            }
            return(realuser);
        }
예제 #2
0
        public ICollection <UserGroup> SaveUsers([FromBody] IList <User> users)
        {
            var transaction = DbContext.Database.BeginTransaction();

            try
            {
                foreach (var user in users)
                {
                    var user2Groups = user.InverseThis2UserGroups;
                    var roles       = user.InverseThis2Roles;
                    user.InverseThis2UserGroups = null;
                    user.InverseThis2Roles      = null;


                    var existing = DbContext.Users.SingleOrDefault(a => a.ObjId == user.ObjId);

                    if (user.Password != null && user.Password == user.PasswordConfirm)
                    {
                        var salt = UserHelper.GenerateNewSalt();
                        user.Password        = UserHelper.HashPassword(user.Password, salt);
                        user.Salt            = salt;
                        user.PasswordConfirm = null;
                    }
                    else if (existing != null)
                    {
                        user.Password = existing.Password;
                        user.Salt     = existing.Salt;
                    }

                    if (existing == null)
                    {
                        DbContext.Users.Add(user);
                    }
                    else
                    {
                        DbContext.Entry(existing).State = EntityState.Detached;
                        DbContext.Users.Update(user);
                    }

                    foreach (var user2Group in user2Groups)
                    {
                        var user2GroupExisting = DbContext.User2Groups.SingleOrDefault(a => a.This2User == user2Group.This2User && a.This2UserGroup == user2Group.This2UserGroup);

                        if (user2GroupExisting != null)
                        {
                            continue;
                        }

                        DbContext.User2Groups.Add(user2Group);
                    }

                    if (user.InverseThis2UserGroups != null)
                    {
                        var removedUserGroups = from c in DbContext.User2Groups
                                                where !(from o in user.InverseThis2UserGroups select o.This2UserGroup).Contains(c.This2UserGroup)
                                                select c;

                        var removedUserGroupsList = removedUserGroups.ToList();
                        DbContext.RemoveRange(removedUserGroupsList);
                    }

                    foreach (var role in roles)
                    {
                        var rolesExisting = DbContext.User2Roles.SingleOrDefault(a => a.This2User == role.This2User && a.This2Role == role.This2Role);

                        if (rolesExisting != null)
                        {
                            continue;
                        }

                        DbContext.User2Roles.Add(role);
                    }

                    if (user.InverseThis2Roles != null)
                    {
                        var removedUserRoles = from c in DbContext.User2Roles
                                               where !(from o in user.InverseThis2Roles select o.This2Role).Contains(c.This2Role)
                                               select c;

                        var emovedUserRolesList = removedUserRoles.ToList();
                        DbContext.RemoveRange(emovedUserRolesList);
                    }
                }

                var removedNodes = from c in DbContext.Users
                                   where !(from o in users select o.ObjId).Contains(c.ObjId)
                                   select c;
                var removedList = removedNodes.ToList();
                DbContext.RemoveRange(removedList);

                DbContext.SaveChanges();
                transaction.Commit();
                _userCache.Clear();
            }
            catch (Exception e)
            {
                SystemLogger.Instance.LogError(e, "Could not save data");
                transaction.Rollback();
            }

            return(GetUserGroups());
        }