Exemple #1
0
        /// <summary>
        /// Removes all users which ID's are stored in UsersToRemove, from the role with ID RoleID.
        /// </summary>
        /// <param name="userIDsToRemove">ArrayList with UserIDs of the users to Remove</param>
        /// <param name="roleID">ID of role the users will be removed from</param>
        /// <returns>true if succeeded, false otherwise</returns>
        public static bool RemoveUsersFromRole(List <int> userIDsToRemove, int roleID)
        {
            if (userIDsToRemove.Count <= 0)
            {
                return(true);
            }

            // we'll delete all role-user combinations for the users in the given range plus for the given role.
            // if there's just one user, we'll use an optimization, as the range query will result in an IN (param, param... ) query,
            // and an field IN (param) query, is much slower compared to field = param, at least on Sqlserver.

            // produce the filter which will be used to filter out the entities to delete.
            PredicateExpression filter = new PredicateExpression();

            if (userIDsToRemove.Count == 1)
            {
                // use compare value predicate instead
                filter.Add((RoleUserFields.UserID == userIDsToRemove[0]));
            }
            else
            {
                // add a range filter
                filter.Add((RoleUserFields.UserID == userIDsToRemove));
            }
            // add the filter for the role as with AND.
            filter.AddWithAnd((RoleUserFields.RoleID == roleID));

            // delete the entities directly from the database. As this gives a single DELETE statement, we don't have to start a transaction manually.
            RoleUserCollection roleUsers = new RoleUserCollection();

            return(roleUsers.DeleteMulti(filter) > 0);
        }
Exemple #2
0
        /// <summary>
        /// Deletes the given role from the system.
        /// </summary>
        /// <param name="roleID">ID of role to delete</param>
        /// <returns>true if succeeded, false otherwise</returns>
        public static bool DeleteRole(int roleID)
        {
            RoleEntity toDelete = SecurityGuiHelper.GetRole(roleID);

            if (toDelete == null)
            {
                // not found
                return(false);
            }

            Transaction trans = new Transaction(IsolationLevel.ReadCommitted, "DeleteRole");

            try
            {
                // remove the role - forum - action right entities
                ForumRoleForumActionRightCollection forumRoleActionRights = new ForumRoleForumActionRightCollection();
                trans.Add(forumRoleActionRights);
                forumRoleActionRights.DeleteMulti(ForumRoleForumActionRightFields.RoleID == roleID);

                // Remove role-audit action entities
                RoleAuditActionCollection roleAuditActions = new RoleAuditActionCollection();
                trans.Add(roleAuditActions);
                roleAuditActions.DeleteMulti(RoleAuditActionFields.RoleID == roleID);

                // remove Role - systemright entities
                RoleSystemActionRightCollection roleSystemRights = new RoleSystemActionRightCollection();
                trans.Add(roleSystemRights);
                roleSystemRights.DeleteMulti(RoleSystemActionRightFields.RoleID == roleID);

                // remove Role - user entities
                RoleUserCollection roleUsers = new RoleUserCollection();
                trans.Add(roleUsers);
                roleUsers.DeleteMulti(RoleUserFields.RoleID == roleID);

                // delete the actual role
                trans.Add(toDelete);
                toDelete.Delete();
                trans.Commit();
                return(true);
            }
            catch
            {
                // error occured, rollback
                trans.Rollback();
                throw;
            }
            finally
            {
                trans.Dispose();
            }
        }
Exemple #3
0
        public override int AddUsersToRoles(RoleUserCollection roleUsers)
        {
            using (SqlQuery query = new SqlQuery())
            {
                int count = 0;
                query.CommandText = "bx_AddUserToRole_xh";
                query.CommandType = CommandType.StoredProcedure;
                foreach (RoleUser item in roleUsers)
                {
                    query.CreateParameter <int>("@UserID", item.UserID, SqlDbType.Int);
                    query.CreateParameter <int>("@RoleID", item.RoleID, SqlDbType.Int);
                    query.CreateParameter <DateTime>("@BeginDate", item.BeginDate, SqlDbType.DateTime);
                    query.CreateParameter <DateTime>("@EndDate", item.EndDate, SqlDbType.DateTime);

                    count += query.ExecuteNonQuery();
                }
                return(count);
            }
        }
Exemple #4
0
        /// <summary>
        /// Adds all users which ID's are stored in UsersToAdd, to the role with ID RoleID.
        /// </summary>
        /// <param name="userIDsToAdd">List with UserIDs of the users to add</param>
        /// <param name="roleID">ID of role the users will be added to</param>
        /// <returns>true if succeeded, false otherwise</returns>
        public static bool AddUsersToRole(List<int> userIDsToAdd, int roleID)
        {
            if(userIDsToAdd.Count<=0)
            {
                return true;
            }

            RoleUserCollection roleUsers = new RoleUserCollection();
            // for each userid in the list, add a new entity to the collection
            foreach(int userID in userIDsToAdd)
            {
                RoleUserEntity newRoleUser = new RoleUserEntity();
                newRoleUser.UserID = userID;
                newRoleUser.RoleID = roleID;
                roleUsers.Add(newRoleUser);
            }

            // save the new role-user combinations
            return (roleUsers.SaveMulti() > 0);
        }
Exemple #5
0
        /// <summary>
        /// Adds all users which ID's are stored in UsersToAdd, to the role with ID RoleID.
        /// </summary>
        /// <param name="userIDsToAdd">List with UserIDs of the users to add</param>
        /// <param name="roleID">ID of role the users will be added to</param>
        /// <returns>true if succeeded, false otherwise</returns>
        public static bool AddUsersToRole(List <int> userIDsToAdd, int roleID)
        {
            if (userIDsToAdd.Count <= 0)
            {
                return(true);
            }

            RoleUserCollection roleUsers = new RoleUserCollection();

            // for each userid in the list, add a new entity to the collection
            foreach (int userID in userIDsToAdd)
            {
                RoleUserEntity newRoleUser = new RoleUserEntity();
                newRoleUser.UserID = userID;
                newRoleUser.RoleID = roleID;
                roleUsers.Add(newRoleUser);
            }

            // save the new role-user combinations
            return(roleUsers.SaveMulti() > 0);
        }
Exemple #6
0
        public int AddUsersToRole(AuthUser operatorUser, IEnumerable <int> userIds, Role role, DateTime beginDate, DateTime enddate)
        {
            RoleUserCollection roleusers = new RoleUserCollection();

            RoleUser ru;

            SimpleUserCollection users = UserBO.Instance.GetSimpleUsers(userIds);
            SimpleUser           user;

            foreach (int i in userIds)
            {
                if (users.TryGetValue(i, out user))
                {
                    ru           = new RoleUser();
                    ru.UserID    = i;
                    ru.RoleID    = role.RID;
                    ru.BeginDate = beginDate;
                    ru.EndDate   = enddate;
                    roleusers.Add(ru);
                }
            }

            return(Math.Abs(RoleDao.Instance.AddUsersToRoles(roleusers)));
        }
Exemple #7
0
 /// <summary>
 /// 将一组用户加入一组用户组
 /// </summary>
 /// <param name="userRoles"></param>
 public abstract int AddUsersToRoles(RoleUserCollection roleUsers);
Exemple #8
0
        /// <summary>
        /// Deletes the user with the ID passed in. Will reset all posts made by the user to the userid 0. 
        /// </summary>
        /// <param name="userID">The user ID.</param>
        /// <remarks>Can't delete user 0</remarks>
        /// <returns>true if succeeded, false otherwise</returns>
        public static bool DeleteUser(int userID)
        {
            if(userID == 0)
            {
                // can't delete the Anonymous coward user.
                return false;
            }

            UserEntity toDelete = UserGuiHelper.GetUser(userID);
            if(toDelete==null)
            {
                // user doesn't exist
                return false;
            }

            // all actions have to take place in a transaction.
            Transaction trans = new Transaction(IsolationLevel.ReadCommitted, "DeleteUser");

            try
            {
                // we'll first update all PostedByUserId fields of all messages which are posted by the user to delete.
                MessageEntity messageUpdater = new MessageEntity();
                messageUpdater.PostedByUserID = 0;	// reset to AC.
                MessageCollection messages = new MessageCollection();
                trans.Add(messages);	// add to the transaction
                // update all entities directly in the DB, which match the following filter and update them with the new values set in messageUpdater.
                messages.UpdateMulti(messageUpdater, (MessageFields.PostedByUserID == userID));

                // set the startuser of threads started by this user to 0
                ThreadEntity threadUpdater = new ThreadEntity();
                threadUpdater.StartedByUserID = 0;
                ThreadCollection threads = new ThreadCollection();
                trans.Add(threads);
                threads.UpdateMulti(threadUpdater, (ThreadFields.StartedByUserID == userID));

                // remove the user from the UserRoles set, as the user shouldn't be in any roles.
                RoleUserCollection roleUsersDeleter = new RoleUserCollection();
                trans.Add(roleUsersDeleter);
                // delete all entities directly from the DB which match the following filter.
                roleUsersDeleter.DeleteMulti(RoleUserFields.UserID == userID);

                // delete all bookmarks of user
                BookmarkCollection bookmarkDeleter = new BookmarkCollection();
                trans.Add(bookmarkDeleter);
                // delete all bookmarks for this user directly from the DB using the following filter.
                bookmarkDeleter.DeleteMulti(BookmarkFields.UserID == userID);

                // delete all audit data
                AuditDataCoreCollection auditDataDeleter = new AuditDataCoreCollection();
                // first fetch it, then delete all entities from the collection, as the audit data is in an inheritance hierarchy of TargetPerEntity which can't
                // be deleted directly from the db.
                trans.Add(auditDataDeleter);
                auditDataDeleter.GetMulti(AuditDataCoreFields.UserID == userID);
                auditDataDeleter.DeleteMulti();

                // set IP bans set by this user to userid 0
                IPBanEntity ipbanUpdater = new IPBanEntity();
                ipbanUpdater.IPBanSetByUserID = 0;
                IPBanCollection ipBans = new IPBanCollection();
                trans.Add(ipBans);
                ipBans.UpdateMulti(ipbanUpdater, (IPBanFields.IPBanSetByUserID == userID));

                // delete threadsubscriptions
                ThreadSubscriptionCollection threadSubscriptionsDeleter = new ThreadSubscriptionCollection();
                trans.Add(threadSubscriptionsDeleter);
                threadSubscriptionsDeleter.DeleteMulti(ThreadSubscriptionFields.UserID == userID);

                // remove supportqueuethread claims
                SupportQueueThreadCollection supportQueueThreads = new SupportQueueThreadCollection();
                trans.Add(supportQueueThreads);
                supportQueueThreads.DeleteMulti(SupportQueueThreadFields.ClaimedByUserID == userID);

                // set all placed in queue references to userid 0, so the threads stay in the queues.
                SupportQueueThreadEntity supportQueueThreadUpdater = new SupportQueueThreadEntity();
                supportQueueThreadUpdater.PlacedInQueueByUserID=0;
                supportQueueThreads.UpdateMulti(supportQueueThreadUpdater, (SupportQueueThreadFields.PlacedInQueueByUserID == userID));

                // now delete the actual user entity
                trans.Add(toDelete);
                toDelete.Delete();

                // all done
                trans.Commit();
                return true;
            }
            catch
            {
                trans.Rollback();
                throw;
            }
            finally
            {
                trans.Dispose();
            }
        }
Exemple #9
0
        /// <summary>
        /// Deletes the user with the ID passed in. Will reset all posts made by the user to the userid 0.
        /// </summary>
        /// <param name="userID">The user ID.</param>
        /// <remarks>Can't delete user 0</remarks>
        /// <returns>true if succeeded, false otherwise</returns>
        public static bool DeleteUser(int userID)
        {
            if (userID == 0)
            {
                // can't delete the Anonymous coward user.
                return(false);
            }

            UserEntity toDelete = UserGuiHelper.GetUser(userID);

            if (toDelete == null)
            {
                // user doesn't exist
                return(false);
            }

            // all actions have to take place in a transaction.
            Transaction trans = new Transaction(IsolationLevel.ReadCommitted, "DeleteUser");

            try
            {
                // we'll first update all PostedByUserId fields of all messages which are posted by the user to delete.
                MessageEntity messageUpdater = new MessageEntity();
                messageUpdater.PostedByUserID = 0;      // reset to AC.
                MessageCollection messages = new MessageCollection();
                trans.Add(messages);                    // add to the transaction
                // update all entities directly in the DB, which match the following filter and update them with the new values set in messageUpdater.
                messages.UpdateMulti(messageUpdater, (MessageFields.PostedByUserID == userID));

                // set the startuser of threads started by this user to 0
                ThreadEntity threadUpdater = new ThreadEntity();
                threadUpdater.StartedByUserID = 0;
                ThreadCollection threads = new ThreadCollection();
                trans.Add(threads);
                threads.UpdateMulti(threadUpdater, (ThreadFields.StartedByUserID == userID));

                // remove the user from the UserRoles set, as the user shouldn't be in any roles.
                RoleUserCollection roleUsersDeleter = new RoleUserCollection();
                trans.Add(roleUsersDeleter);
                // delete all entities directly from the DB which match the following filter.
                roleUsersDeleter.DeleteMulti(RoleUserFields.UserID == userID);

                // delete all bookmarks of user
                BookmarkCollection bookmarkDeleter = new BookmarkCollection();
                trans.Add(bookmarkDeleter);
                // delete all bookmarks for this user directly from the DB using the following filter.
                bookmarkDeleter.DeleteMulti(BookmarkFields.UserID == userID);

                // delete all audit data
                AuditDataCoreCollection auditDataDeleter = new AuditDataCoreCollection();
                // first fetch it, then delete all entities from the collection, as the audit data is in an inheritance hierarchy of TargetPerEntity which can't
                // be deleted directly from the db.
                trans.Add(auditDataDeleter);
                auditDataDeleter.GetMulti(AuditDataCoreFields.UserID == userID);
                auditDataDeleter.DeleteMulti();

                // set IP bans set by this user to userid 0
                IPBanEntity ipbanUpdater = new IPBanEntity();
                ipbanUpdater.IPBanSetByUserID = 0;
                IPBanCollection ipBans = new IPBanCollection();
                trans.Add(ipBans);
                ipBans.UpdateMulti(ipbanUpdater, (IPBanFields.IPBanSetByUserID == userID));

                // delete threadsubscriptions
                ThreadSubscriptionCollection threadSubscriptionsDeleter = new ThreadSubscriptionCollection();
                trans.Add(threadSubscriptionsDeleter);
                threadSubscriptionsDeleter.DeleteMulti(ThreadSubscriptionFields.UserID == userID);

                // remove supportqueuethread claims
                SupportQueueThreadCollection supportQueueThreads = new SupportQueueThreadCollection();
                trans.Add(supportQueueThreads);
                supportQueueThreads.DeleteMulti(SupportQueueThreadFields.ClaimedByUserID == userID);

                // set all placed in queue references to userid 0, so the threads stay in the queues.
                SupportQueueThreadEntity supportQueueThreadUpdater = new SupportQueueThreadEntity();
                supportQueueThreadUpdater.PlacedInQueueByUserID = 0;
                supportQueueThreads.UpdateMulti(supportQueueThreadUpdater, (SupportQueueThreadFields.PlacedInQueueByUserID == userID));

                // now delete the actual user entity
                trans.Add(toDelete);
                toDelete.Delete();

                // all done
                trans.Commit();
                return(true);
            }
            catch
            {
                trans.Rollback();
                throw;
            }
            finally
            {
                trans.Dispose();
            }
        }
Exemple #10
0
        public override int AddUsersToRoles(RoleUserCollection roleUsers)
        {
            using (SqlQuery query = new SqlQuery())
            {
                int count=0;
                query.CommandText = "bx_AddUserToRole_xh";
                query.CommandType = CommandType.StoredProcedure;
                foreach (RoleUser item in roleUsers)
                {
                    query.CreateParameter<int>("@UserID", item.UserID, SqlDbType.Int);
                    query.CreateParameter<int>("@RoleID",item.RoleID,SqlDbType.Int);
                    query.CreateParameter<DateTime>("@BeginDate", item.BeginDate, SqlDbType.DateTime);
                    query.CreateParameter<DateTime>("@EndDate", item.EndDate, SqlDbType.DateTime);

                    count += query.ExecuteNonQuery();
                }
                return count;
            }

            
        }
Exemple #11
0
        /// <summary>
        /// Removes all users which ID's are stored in UsersToRemove, from the role with ID RoleID.
        /// </summary>
        /// <param name="userIDsToRemove">ArrayList with UserIDs of the users to Remove</param>
        /// <param name="roleID">ID of role the users will be removed from</param>
        /// <returns>true if succeeded, false otherwise</returns>
        public static bool RemoveUsersFromRole(List<int> userIDsToRemove, int roleID)
        {
            if(userIDsToRemove.Count<=0)
            {
                return true;
            }

            // we'll delete all role-user combinations for the users in the given range plus for the given role.
            // if there's just one user, we'll use an optimization, as the range query will result in an IN (param, param... ) query,
            // and an field IN (param) query, is much slower compared to field = param, at least on Sqlserver.

            // produce the filter which will be used to filter out the entities to delete.
            PredicateExpression filter = new PredicateExpression();
            if(userIDsToRemove.Count == 1)
            {
                // use compare value predicate instead
                filter.Add((RoleUserFields.UserID == userIDsToRemove[0]));
            }
            else
            {
                // add a range filter
                filter.Add((RoleUserFields.UserID == userIDsToRemove));
            }
            // add the filter for the role as with AND.
            filter.AddWithAnd((RoleUserFields.RoleID == roleID));

            // delete the entities directly from the database. As this gives a single DELETE statement, we don't have to start a transaction manually.
            RoleUserCollection roleUsers = new RoleUserCollection();
            return (roleUsers.DeleteMulti(filter) > 0);
        }
Exemple #12
0
        /// <summary>
        /// Deletes the given role from the system.
        /// </summary>
        /// <param name="roleID">ID of role to delete</param>
        /// <returns>true if succeeded, false otherwise</returns>
        public static bool DeleteRole(int roleID)
        {
            RoleEntity toDelete = SecurityGuiHelper.GetRole(roleID);
            if(toDelete == null)
            {
                // not found
                return false;
            }

            Transaction trans = new Transaction(IsolationLevel.ReadCommitted, "DeleteRole");

            try
            {
                // remove the role - forum - action right entities
                ForumRoleForumActionRightCollection forumRoleActionRights = new ForumRoleForumActionRightCollection();
                trans.Add(forumRoleActionRights);
                forumRoleActionRights.DeleteMulti(ForumRoleForumActionRightFields.RoleID == roleID);

                // Remove role-audit action entities
                RoleAuditActionCollection roleAuditActions = new RoleAuditActionCollection();
                trans.Add(roleAuditActions);
                roleAuditActions.DeleteMulti(RoleAuditActionFields.RoleID == roleID);

                // remove Role - systemright entities
                RoleSystemActionRightCollection roleSystemRights = new RoleSystemActionRightCollection();
                trans.Add(roleSystemRights);
                roleSystemRights.DeleteMulti(RoleSystemActionRightFields.RoleID == roleID);

                // remove Role - user entities
                RoleUserCollection roleUsers = new RoleUserCollection();
                trans.Add(roleUsers);
                roleUsers.DeleteMulti(RoleUserFields.RoleID == roleID);

                // delete the actual role
                trans.Add(toDelete);
                toDelete.Delete();
                trans.Commit();
                return true;
            }
            catch
            {
                // error occured, rollback
                trans.Rollback();
                throw;
            }
            finally
            {
                trans.Dispose();
            }
        }