Пример #1
0
        public void UpdateUser(UserWithPermissionsContract contract)
        {
            ParamIs.NotNull(() => contract);

            UpdateEntity <User>(contract.Id, (session, user) => {
                if (!EntryPermissionManager.CanEditUser(PermissionContext, user.GroupId))
                {
                    var loggedUser = GetLoggedUser(session);
                    var msg        = string.Format("{0} (level {1}) not allowed to edit {2}", loggedUser, loggedUser.GroupId, user);
                    log.Error(msg);
                    throw new NotAllowedException(msg);
                }

                if (EntryPermissionManager.CanEditGroupTo(PermissionContext, contract.GroupId))
                {
                    user.GroupId = contract.GroupId;
                }

                if (EntryPermissionManager.CanEditAdditionalPermissions(PermissionContext))
                {
                    user.AdditionalPermissions = new PermissionCollection(contract.AdditionalPermissions.Select(p => PermissionToken.GetById(p.Id)));
                }

                var diff = OwnedArtistForUser.Sync(user.AllOwnedArtists, contract.OwnedArtistEntries, a => user.AddOwnedArtist(session.Load <Artist>(a.Artist.Id)));
                SessionHelper.Sync(session, diff);

                user.Active = contract.Active;

                AuditLog(string.Format("updated {0}", EntryLinkFactory.CreateEntryLink(user)), session);
            }, PermissionToken.ManageUserPermissions, skipLog: true);
        }
Пример #2
0
        public UserWithPermissionsContract GetUserByName(string name, bool skipMessages)
        {
            return(HandleQuery(session =>
            {
                var user = session.Query <User>().FirstOrDefault(u => u.Name.Equals(name));

                if (user == null)
                {
                    return null;
                }

                var contract = new UserWithPermissionsContract(user, LanguagePreference);

                if (!skipMessages)
                {
                    contract.UnreadMessagesCount = session.Query <UserMessage>()
                                                   .Where(m => m.User.Id == user.Id)
                                                   .WhereIsUnread(true)
                                                   .WhereInboxIs(UserInboxType.Nothing, true)
                                                   .Count();
                }

                return contract;
            }));
        }
Пример #3
0
        public static void SetLoggedUser(UserWithPermissionsContract user)
        {
            ParamIs.NotNull(() => user);

            if (!HttpContext.Current.User.Identity.IsAuthenticated)
            {
                throw new InvalidOperationException("Must be authenticated");
            }

            HttpContext.Current.User = new VocaDbPrincipal(HttpContext.Current.User.Identity, user);
        }
Пример #4
0
        public void UpdateUser_Name_InvalidCharacters()
        {
            LoggedUser.GroupId = UserGroupId.Admin;
            permissionContext.RefreshLoggedUser(repository);

            var contract = new UserWithPermissionsContract(userWithoutEmail, ContentLanguagePreference.Default);

            contract.Name = "Miku!";

            data.UpdateUser(contract);
        }
Пример #5
0
 public UserEdit(UserWithPermissionsContract contract)
     : this()
 {
     Active       = contract.Active;
     GroupId      = contract.GroupId;
     Id           = contract.Id;
     Name         = contract.Name;
     OwnedArtists = contract.OwnedArtistEntries;
     Permissions  = PermissionToken.All
                    .Select(p => new PermissionFlagEntry(p, contract.AdditionalPermissions.Contains(p), contract.EffectivePermissions.Contains(p))).ToArray();
 }
Пример #6
0
        public void UpdateUser_Name_AlreadyInUse()
        {
            LoggedUser.GroupId = UserGroupId.Admin;
            permissionContext.RefreshLoggedUser(repository);

            var contract = new UserWithPermissionsContract(userWithoutEmail, ContentLanguagePreference.Default);

            contract.Name = userWithEmail.Name;

            data.UpdateUser(contract);
        }
Пример #7
0
        public void UpdateUser_SetPermissions()
        {
            LoggedUser.GroupId = UserGroupId.Admin;
            permissionContext.RefreshLoggedUser(repository);

            var contract = new UserWithPermissionsContract(userWithoutEmail, ContentLanguagePreference.Default);

            contract.AdditionalPermissions = new HashSet <PermissionToken>(new[] { PermissionToken.DesignatedStaff });
            data.UpdateUser(contract);

            var user = repository.Load(contract.Id);

            Assert.IsTrue(user.AdditionalPermissions.Has(PermissionToken.DesignatedStaff), "User has the given permission");
        }
Пример #8
0
        public UserWithPermissionsContract GetUserByName(string name, bool skipMessages)
        {
            return(HandleQuery(session => {
                var user = session.Query <User>().FirstOrDefault(u => u.Name.Equals(name));

                if (user == null)
                {
                    return null;
                }

                var contract = new UserWithPermissionsContract(user, LanguagePreference);

                if (!skipMessages)
                {
                    contract.UnreadMessagesCount = session.Query <UserMessage>().Count(m => !m.Read && m.Receiver.Id == user.Id);
                }

                return contract;
            }));
        }
Пример #9
0
        public void UpdateUser_Name()
        {
            LoggedUser.GroupId = UserGroupId.Admin;
            permissionContext.RefreshLoggedUser(repository);

            var oldName  = userWithoutEmail.Name;
            var contract = new UserWithPermissionsContract(userWithoutEmail, ContentLanguagePreference.Default);

            contract.Name = "HatsuneMiku";

            data.UpdateUser(contract);

            var user = repository.Load(contract.Id);

            Assert.AreEqual("HatsuneMiku", user.Name, "Name was updated");
            Assert.AreEqual("hatsunemiku", user.NameLC, "Name was updated");

            var oldNameEntry = repository.List <OldUsername>().FirstOrDefault(u => u.User.Id == userWithoutEmail.Id);

            Assert.IsNotNull(oldNameEntry, "Old name entry was created");
            Assert.AreEqual(oldName, oldNameEntry.OldName, "Old name as expected");
        }
Пример #10
0
 public void SetLoggedUser(User user)
 {
     LoggedUser = new UserWithPermissionsContract(user, ContentLanguagePreference.Default);
 }
Пример #11
0
 public FakePermissionContext(UserWithPermissionsContract loggedUser)
 {
     LoggedUser = loggedUser;
 }
Пример #12
0
 protected override string GetPersistedValue(UserWithPermissionsContract permissionContext) => permissionContext.Language;
Пример #13
0
 protected override bool GetPersistedValue(UserWithPermissionsContract user)
 {
     return(user.ShowChatbox);
 }
Пример #14
0
 protected override void SetPersistedValue(UserWithPermissionsContract user, bool val)
 {
     user.ShowChatbox = val;
 }
Пример #15
0
 protected override void SetPersistedValue(UserWithPermissionsContract user, ContentLanguagePreference val)
 {
     user.DefaultLanguageSelection = val;
 }
Пример #16
0
 protected override ContentLanguagePreference GetPersistedValue(UserWithPermissionsContract user)
 {
     return(user.DefaultLanguageSelection);
 }
Пример #17
0
 protected abstract void SetPersistedValue(UserWithPermissionsContract user, T val);
Пример #18
0
 protected abstract T GetPersistedValue(UserWithPermissionsContract permissionContext);
Пример #19
0
        public void UpdateUser_NotAllowed()
        {
            var contract = new UserWithPermissionsContract(userWithoutEmail, ContentLanguagePreference.Default);

            data.UpdateUser(contract);
        }
Пример #20
0
 public VocaDbPrincipal(IIdentity identity, UserWithPermissionsContract user)
     : base(identity, new string[] {})
 {
     this.user = user;
 }
Пример #21
0
 protected override void SetPersistedValue(UserWithPermissionsContract user, string val)
 {
     user.Language = val;
 }