📄 activerecordrolesprovider.cs
字号:
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 + -