⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 activerecordrolesprovider.cs

📁 如果不使用IIS,请先运行 XSP.exe,待提示已侦听 8080端口后
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System.Web.Security;
using System.Configuration.Provider;
using System.Collections.Specialized;
using System;
using System.Data;
using System.Data.Odbc;
using System.Configuration;
using System.Diagnostics;
using System.Web;
using System.Globalization;
using System.Security.Cryptography;
using System.Text;
using System.Web.Configuration;
using Castle.ActiveRecord;
using Castle.ActiveRecord.Framework;
using NHibernate.Expression;
using Castle.ActiveRecord.Queries;

/// <summary>
///使用ActiveRecord实现的RolesProvider
/// </summary>
public class ActiveRecordRoleProvider: RoleProvider 
{
	public ActiveRecordRoleProvider()  
	{
        DNNLite.GlobalApplication.initActiveRecord();
	}

    //
    // Global connection string, generic exception message, event log info.
    //

    private string eventSource = "ActiveRecordRoleProvider";
    private string eventLog = "Application";
    private string exceptionMessage = "An exception occurred. Please check the Event Log.";

    //
    // If false, exceptions are thrown to the caller. If true,
    // exceptions are written to the event log.
    //

    private bool pWriteExceptionsToEventLog = false;

    public bool WriteExceptionsToEventLog
    {
      get { return pWriteExceptionsToEventLog; }
      set { pWriteExceptionsToEventLog = value; }
    }


    private static aspnet_Applications app=null;

    //
    // System.Configuration.Provider.ProviderBase.Initialize Method
    //

    public override void Initialize(string name, NameValueCollection config)
    {

      //
      // Initialize values from web.config.
      //

      if (config == null)
        throw new ArgumentNullException("config");

      if (name == null || name.Length == 0)
        name = "ActiveRecordRoleProvider";

      if (String.IsNullOrEmpty(config["description"]))
      {
        config.Remove("description");
        config.Add("description", "ActiveRecord Role provider");
      }

      // Initialize the abstract base class.
      base.Initialize(name, config);


      if (config["applicationName"] == null || config["applicationName"].Trim() == "")
      {
        pApplicationName = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath;
      }
      else
      {
        pApplicationName = config["applicationName"];
      }


      if (config["writeExceptionsToEventLog"] != null)
      {
        if (config["writeExceptionsToEventLog"].ToUpper() == "TRUE")
        {
          pWriteExceptionsToEventLog = true;
        }
      }

        app = ActiveRecordMediator<aspnet_Applications>.FindFirst(
             new EqExpression("ApplicationName", pApplicationName)
            );

        if (app == null)
        {
            app = new aspnet_Applications();
            app.ApplicationName = pApplicationName;
            app.Description = "";
            app.LoweredApplicationName = pApplicationName;
            ActiveRecordMediator<aspnet_Applications>.CreateAndFlush(app);
        }

      
    }



    //
    // System.Web.Security.RoleProvider properties.
    //
    

    private string pApplicationName;


    public override string ApplicationName
    {
      get { return pApplicationName; }
      set { pApplicationName = value; }
    } 

    //
    // System.Web.Security.RoleProvider methods.
    //

    //
    // RoleProvider.AddUsersToRoles
    //

    #region 私有方法
    private aspnet_Membership GetAspNetMemberShip(string username)
    {
        aspnet_Membership membership = ActiveRecordMediator<aspnet_Membership>.FindFirst(
               new EqExpression("UserName", username),
               new EqExpression("Application", app)
              );

        return membership;
    }

    private aspnet_roles GetAspnetRole(string rolename)
    {
        aspnet_roles role = ActiveRecordMediator<aspnet_roles>.FindFirst(
               new EqExpression("RoleName", rolename ),
               new EqExpression("Application", app)
              );
        return role;
    }

    #endregion

    public override void AddUsersToRoles(string[]  usernames, string[] rolenames)
    {
      foreach (string rolename in rolenames)
      {
        if (!RoleExists(rolename))
        {
          throw new ProviderException("角色没有找到.");
        }
      }

      foreach (string username in usernames)
      {
        if (username.IndexOf(',') > 0)
        {
          throw new ArgumentException("用户名不能包含','符号.");
        }

        foreach (string rolename in rolenames)
        {
          if (IsUserInRole(username, rolename))
          {
            throw new ProviderException("用户已包含在组里.");
          }
        }
      }

      using (TransactionScope t = new TransactionScope(OnDispose.Rollback))
      {
          
          foreach (string  rolename in rolenames )
          {
              foreach (string username in usernames)
              {
                  aspnet_usersinroles ur = new aspnet_usersinroles();
                  aspnet_Membership m = GetAspNetMemberShip(username);
                  aspnet_roles r = GetAspnetRole(rolename);
                  
                  ur.Role = r;
                  ur.User = m;
                  ActiveRecordMediator<aspnet_usersinroles>.Create(ur);
                  
                  
              }

              t.VoteCommit();
          }

      }

      //OdbcConnection conn = new OdbcConnection(connectionString);
      //OdbcCommand cmd = new OdbcCommand("INSERT INTO [" + usersInRolesTable + "]"  +
      //        " (Username, Rolename, ApplicationName) " +
      //        " Values(?, ?, ?)", conn);

      //OdbcParameter userParm = cmd.Parameters.Add("@Username", OdbcType.VarChar, 255);
      //OdbcParameter roleParm = cmd.Parameters.Add("@Rolename", OdbcType.VarChar, 255);
      //cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;

      //OdbcTransaction tran = null;

      //try
      //{
      //  conn.Open();
      //  tran = conn.BeginTransaction();
      //  cmd.Transaction = tran;

      //  foreach (string username in usernames)
      //  {
      //    foreach (string rolename in rolenames)
      //    {
      //      userParm.Value = username;
      //      roleParm.Value = rolename;
      //      cmd.ExecuteNonQuery();
      //    }
      //  }

      //  tran.Commit();
      //}
      //catch (OdbcException e)
      //{
      //  try
      //  {
      //    tran.Rollback();
      //  }
      //  catch { }


      //  if (WriteExceptionsToEventLog)
      //  {
      //    WriteToEventLog(e, "AddUsersToRoles");
      //  }
      //  else
      //  {
      //    throw e;
      //  }
      //}
      //finally
      //{
      //  conn.Close();      
      //}
    }


    //
    // RoleProvider.CreateRole
    //

    public override void CreateRole(string rolename)
    { 
      if (rolename.IndexOf(',') > 0)
      {
        throw new ArgumentException("角色名称不能包含','符号.");
      }

      if (RoleExists(rolename))
      {
        throw new ProviderException("角色已存在.");
      }

      aspnet_roles role = new aspnet_roles();
      role.Application = app;
      role.RoleName = rolename;
      role.LoweredRoleName = rolename;
      ActiveRecordMediator<aspnet_roles>.CreateAndFlush(role);

      
    }


    //
    // RoleProvider.DeleteRole
    //

    public override bool DeleteRole(string rolename, bool throwOnPopulatedRole)
    {
      if (!RoleExists(rolename))
      {
        throw new ProviderException("Role does not exist.");
      }

      if (throwOnPopulatedRole && GetUsersInRole(rolename).Length > 0)
      {
        throw new ProviderException("Cannot delete a populated role.");
      }

      using (TransactionScope t = new TransactionScope(OnDispose.Rollback))
      {
          aspnet_roles role = GetAspnetRole(rolename);
          ActiveRecordMediator<aspnet_roles>.Delete(role);

          t.VoteCommit();
      }

      //OdbcConnection conn = new OdbcConnection(connectionString);
      //OdbcCommand cmd = new OdbcCommand("DELETE FROM [" + rolesTable + "]"  +
      //        " WHERE Rolename = ? AND ApplicationName = ?", conn);

      //cmd.Parameters.Add("@Rolename", OdbcType.VarChar, 255).Value = rolename;
      //cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;


      //OdbcCommand cmd2 = new OdbcCommand("DELETE FROM [" + usersInRolesTable + "]"  +
      //        " WHERE Rolename = ? AND ApplicationName = ?", conn);

      //cmd2.Parameters.Add("@Rolename", OdbcType.VarChar, 255).Value = rolename;
      //cmd2.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;

      //OdbcTransaction tran = null;

      //try
      //{
      //  conn.Open();
      //  tran = conn.BeginTransaction();
      //  cmd.Transaction = tran;
      //  cmd2.Transaction = tran;

      //  cmd2.ExecuteNonQuery();
      //  cmd.ExecuteNonQuery();

      //  tran.Commit();
      //}
      //catch (OdbcException e)
      //{
      //  try
      //  {
      //    tran.Rollback();
      //  }
      //  catch { }


      //  if (WriteExceptionsToEventLog)
      //  {
      //    WriteToEventLog(e, "DeleteRole");

      //    return false;
      //  }
      //  else
      //  {
      //    throw e;
      //  }
      //}
      //finally
      //{
      //  conn.Close();      
      //}

      return true;
    }


    //
    // RoleProvider.GetAllRoles
    //

    public override string[] GetAllRoles()
    {
      string tmpRoleNames = "";

      //OdbcConnection conn = new OdbcConnection(connectionString);
      //OdbcCommand cmd = new OdbcCommand("SELECT Rolename FROM [" + rolesTable + "]"  +
      //          " WHERE ApplicationName = ?", conn);

      //cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;

      //OdbcDataReader reader = null;

      try
      {
         aspnet_roles[] rs = ActiveRecordMediator<aspnet_roles>
          .FindAll(new EqExpression("Application", app));

            for (int i = 0; i < rs.Length ; i++)
			{
			 tmpRoleNames += rs[i].RoleName + ",";
			}

      }
      catch (ActiveRecordException  e)
      {
        
          throw e;
        
      }
      

      if (tmpRoleNames.Length > 0)
      {
        // Remove trailing comma.
        tmpRoleNames = tmpRoleNames.Substring(0, tmpRoleNames.Length - 1);
        return tmpRoleNames.Split(',');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -