自定义RoleProvider和MembershipProvider
来源:互联网 发布:keynote转ppt软件 编辑:程序博客网 时间:2024/05/16 10:36
为什么要自定义呢?
首先,自定义有更大的灵活性,不必过份依赖于aspnetdb数据库,有利于自己的扩展;其次,自定义以后仍然可以用.Net 2.0中自带的Login控件。
当然,自定义不是随便自定义,而要是实现二个抽象类:
MembershipProvider和RoleProvider
这二个抽象类的说明请参见SDK 2.0或MSDN,这里不多说了。
在这个Demo中,MembershipProvider中要重写的方法有:ValidateUser
因为我只是为了验证用户,要实现创建、编辑,就要实现UpdateUser方法、CreateUser方法了。
看ValidateUser方法的重写:[MyMemberShip.cs]
- public override bool ValidateUser(string username, string password)
- {
- using (OleDbConnection conn = new OleDbConnection(connectionstring))
- {
- OleDbCommand comm = new OleDbCommand();
- comm.CommandText = "select count(0) from users where u_name=@name and u_pwd=@pwd";
- comm.Parameters.AddWithValue("@name", username);
- comm.Parameters.AddWithValue("@pwd", password);
- comm.Connection = conn;
- conn.Open();
- return ((int)comm.ExecuteScalar()) > 0 ? true : false;
- }
- }
这里的变量connectionstring我写在.cs里了,这只是为了演示,应该写在web.config中的。这个方法不用多说,相信大家能看明白。
这就实现了用户的验证。
下面实现角色的验证[MyRole.cs]
要实现的方法有:
bool IsUserInRole(string username, string roleName)
用于验证用户是否属于指定的角色
- public override bool IsUserInRole(string username, string roleName)
- {
- using (OleDbConnection conn = new OleDbConnection(connectionstring))
- {
- OleDbCommand comm = new OleDbCommand();
- comm.CommandText = "select top 1 * from users where u_name=@name and u_role=@role";
- comm.Parameters.AddWithValue("@name", username);
- comm.Parameters.AddWithValue("@role", roleName);
- comm.Connection = conn;
- conn.Open();
- using (OleDbDataReader dr = comm.ExecuteReader())
- {
- if (dr.HasRows)
- {
- return true;
- }
- return false;
- }
- }
- }
代码简单,也不多说了
第二个要实现的方法:
string[] GetRolesForUser(string username),取得当前用户的所有角色列表
- public override string[] GetRolesForUser(string username)
- {
- string[] tmp = new string[] { };
- using (OleDbConnection conn = new OleDbConnection(connectionstring))
- {
- OleDbCommand comm = new OleDbCommand();
- comm.CommandText = "select top 1 * from users where u_name=@name";
- comm.Parameters.AddWithValue("@name", username);
- comm.Connection = conn;
- conn.Open();
- using (OleDbDataReader dr = comm.ExecuteReader())
- {
- if (dr.Read())
- {
- tmp = dr["U_role"].ToString().Split(',');
- }
- }
- }
- return tmp;
- }
下面就是更改web.config了
首先,需要对相关页作forms验证
<authentication mode="Forms">
<forms defaultUrl="default.aspx" loginUrl="userlogin.aspx" path="/" name="Demo"/>
</authentication>
注意下面的配置,重中之重
- <membership defaultProvider="MyMemberShip">
- <providers>
- <add name="MyMemberShip" type="MyMemberShip" requiresQuestionAndAnswer="true" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=H:/Documents and Settings/Administrator/桌面/Demo/demo.mdb;Persist Security Info=False"/>
- </providers>
- </membership>
- <roleManager defaultProvider="MyRole" enabled="true">
- <providers>
- <add name="MyRole" type="MyRole"/>
- </providers>
- </roleManager>
注意roleManager中的enabled一定要为true,否则会失效。
- <location path="admin.aspx">
- <system.web>
- <authorization>
- <allow roles="admin"/>
- <deny users="*"/>
- </authorization>
- </system.web>
- </location>
- <location path="guest.aspx">
- <system.web>
- <authorization>
- <allow roles="guest"/>
- <deny users="*"/>
- </authorization>
- </system.web>
- </location>
对admin.aspx与guest.aspx做不同的角色控制
累了,直接看demo吧
用户名 密码
admin admin
guest guest
http://demo.lemongtree.com/default.aspx
下载:
http://www.lemongtree.com/download/MemberShip.rar
- 自定义RoleProvider和MembershipProvider
- 在非SqlServer数据库上实现MemberShip和Role功能(自定义MemberShipProvider和RoleProvider)
- ASP.NET + MySQL 开发笔记 - MembershipProvider 和 RoleProvider 用法
- 自定义MembershipProvider
- Custom MembershipProvider and RoleProvider Implementations that use Web Services
- Membership学习(四)-自定义MembershipProvider
- Membership学习(四)-自定义MembershipProvider
- Membership学习(四)-自定义MembershipProvider
- Membership学习(四)-自定义MembershipProvider
- 自定义MembershipProvider来利用Asp.net 2.0 Login控件的登陆和修改密码模块
- 自定义MembershipProvider来利用Asp.net 2.0 Login控件的登陆和修改密码模块
- 自定义MembershipProvider,asp.net2.0 Forms验证-代码及分析
- asp.net form 身份验证--不使用membershipprovider和rolesprovider(二)
- MembershipProvider.PasswordAttemptWindow 属性
- 无法找到MembershipProvider
- RoleProvider的重写(转至msdn)
- MVC中重写RoleProvider角色管理
- 在Moss中,使用自己的MembershipProvider.
- 调整字符和单词间的间距
- 各位老师帮帮忙..急!
- CISSP Learning Notes (1) Information of Exam
- 浅谈内存泄漏(一)
- EVC 下载地址
- 自定义RoleProvider和MembershipProvider
- jsp+spring调用配置
- SQL SERVER数据库字典
- 浅谈内存泄漏(二)
- Production Issue: Drop ship order line workflow issue
- JS中的attachEvent、addEventListener如何传递参数
- 写在我的22周岁生日时
- 为图片镶边及边框翻转效果
- DataGridView..::.CellContentClick 事件