Example #1
0
        public static void ConvertRoles()
        {
            RoleCollection newRoles = new RoleCollection();

            string sql = @"
--�����û������ݵĴ�����

IF EXISTS(SELECT * FROM sysobjects WHERE [type]=N'TR' AND [name]=N'bx_UserRoles_AfterUpdate')
	DROP TRIGGER bx_UserRoles_AfterUpdate;
--GO
";
            using (SqlConnection connection = new SqlConnection(Settings.Current.IConnectionString))
            {
                connection.Open();
                SqlCommand command = new SqlCommand(sql, connection);
                command.CommandTimeout = 60;
                try
                {
                    command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    CreateLog(ex);
                    throw new Exception("ɾ��������bx_UserRoles_AfterUpdateʧ��" + ex.Message + sql);
                }
                finally
                {
                    connection.Close();
                }
            }



            Guid vipRoleID = new Guid(new byte[] { 152, 198, 223, 228, 218, 198, 221, 78, 191, 59, 129, 195, 81, 168, 105, 207 });

            //�����ο͡�everyone
            sql = @"
IF EXISTS (SELECT * FROM sysobjects WHERE [type] = N'U' AND [name] = N'Max_Roles') AND EXISTS (SELECT * FROM [sysobjects] WHERE [type]='U' AND [name]='Max_UsersInRoles') BEGIN

	IF NOT EXISTS (SELECT [name] FROM syscolumns WHERE id = object_id('Max_Roles') AND [name] = 'NewRoleID')
		ALTER TABLE Max_Roles add [NewRoleID] uniqueidentifier NOT NULL DEFAULT(NEWID());

    SELECT * FROM Max_Roles WHERE RoleID > 0;

    IF EXISTS (SELECT * FROM sysobjects WHERE [type] = N'U' AND [name] = N'bbsMax_PointLevels')
        SELECT * FROM bbsMax_PointLevels WHERE RequireRoleID = 0;
END
ELSE
    SELECT -9999 AS RoleID;
";
            using (SqlConnection connection = new SqlConnection(Settings.Current.IConnectionString))
            {
                connection.Open();
                SqlCommand command = new SqlCommand(sql, connection);
                command.CommandTimeout = 60;
                try
                {
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            #region �����߼�

                            int roleID = (int)reader["RoleID"];

                            //Max_Roles������ڣ��˳��û���ת��
                            if (roleID == -9999)
                                return;

                            Guid newRoleID = (Guid)reader["NewRoleID"];
                            string roleName = (string)reader["RoleName"];
                            string logoUrl = (string)reader["LogoUrl"];
                            string displayColor = (string)reader["DisplayColor"];

                            Role role;

                            switch (roleID)
                            {
                                case 1:
                                    role = Role.Owners.Clone();//Role.CreateManagerRole();
                                    //role.RoleID = newRoleID;
                                    role.Title = roleName;
                                    break;

                                case 2:
                                    role = Role.Administrators.Clone();
                                    //role.RoleID = newRoleID;
                                    role.Title = roleName;
                                    break;

                                case 3:
                                    role = Role.SuperModerators.Clone();
                                    //role.RoleID = newRoleID;
                                    role.Title = roleName;
                                    break;

                                case 5:
                                    role = Role.CreateNormalRole();
                                    role.RoleID = vipRoleID;
                                    role.Name = roleName;
                                    role.Title = roleName;
                                    break;

                                default:
                                    if (roleID > 8)
                                    {
                                        role = Role.CreateNormalRole();
                                        role.RoleID = newRoleID;
                                        role.Name = roleName;
                                    }
                                    else
                                        continue;
                                    break;
                            }

                            newRoles.Set(role);

                            #endregion
                        }

                        if (reader.NextResult())
                        {
                            while (reader.Read())
                            {
                                Role role = Role.CreateLevelRole();

                                role.RequiredPoint = (int)reader["RequirePoints"];
                                role.RoleID = Guid.NewGuid();
                                role.Name = (string)reader["LevelName"];
                                role.Title = role.Name;
                                role.StarLevel = (int)reader["Stars"];

                                newRoles.Add(role);
                            }
                        }

                        newRoles.Sort();
                    }

                    sql = @"
UPDATE bx_Settings SET [Value] = @RolesString WHERE TypeName = 'MaxLabs.bbsMax.Settings.RoleSettings' AND [Key] = 'Roles';
IF @@ROWCOUNT = 0
    INSERT INTO bx_Settings ([Key], [Value], [TypeName]) VALUES ('Roles', @RolesString, 'MaxLabs.bbsMax.Settings.RoleSettings');

IF EXISTS (SELECT * FROM [sysobjects] WHERE [type]='U' AND [name]='Max_UsersInRoles') BEGIN
	truncate table [bx_UserRoles];
    
    UPDATE Max_Roles SET NewRoleID = @NewRoleID1 WHERE RoleID = 1;
    UPDATE Max_Roles SET NewRoleID = @NewRoleID2 WHERE RoleID = 2;
    UPDATE Max_Roles SET NewRoleID = @NewRoleID3 WHERE RoleID = 3;
    UPDATE Max_Roles SET NewRoleID = @NewRoleID5 WHERE RoleID = 5;

	INSERT INTO [bx_UserRoles]
           ([UserID]
           ,[RoleID]
           ,[BeginDate]
           ,[EndDate])
     SELECT 
           u.UserID,--(<UserID, int,>
           r.NewRoleID,--,<RoleID, uniqueidentifier,>
           u.EnabledDate,--,<BeginDate, datetime,>
           u.ExpiresDate--,<EndDate, datetime,>)
		FROM Max_UsersInRoles u WITH (NOLOCK)
        INNER JOIN Max_Roles r WITH (NOLOCK) ON u.RoleID = r.RoleID
        WHERE u.RoleID IN (1,2,3,5) OR u.RoleID > 8;

	DROP TABLE Max_UsersInRoles;
END

DROP TABLE Max_Roles;
";
                    command.CommandTimeout = 3600;
                    command.CommandText = sql;

                    command.Parameters.AddWithValue("@NewRoleID1", Role.Owners.RoleID);
                    command.Parameters.AddWithValue("@NewRoleID2", Role.Administrators.RoleID);
                    command.Parameters.AddWithValue("@NewRoleID3", Role.SuperModerators.RoleID);
                    command.Parameters.AddWithValue("@NewRoleID5", vipRoleID);

                    SqlParameter param = new SqlParameter("@RolesString", SqlDbType.NText);
                    param.Value = newRoles.GetValue();
                    command.Parameters.Add(param);

                    command.ExecuteNonQuery();

                }
                catch (Exception ex)
                {
                    CreateLog(ex);
                    throw new Exception("�����û�������ʧ��" + ex.Message + sql);
                }
                finally
                {
                    connection.Close();
                }


            }
        }