您的位置: 首页 > 技术文档 > 网络编程 > 自定义RoleProvider
asp检测文件编码 回到列表 RSS 在线阅读器开发实例
用户名:
密 码: 忘记密码
注册会员 游览论坛 论坛帮助
 自定义RoleProvider

作者:幻想曲 时间: 2006-12-05 文档类型:原创 来自:蓝色理想
浏览统计 total:187 | year:187 | Quarter:187 | Month:187 | Week:187 | today:6

作者的站点:http://www.lemongtree.com/
原文:http://www.lemongtree.com/zh-cn/0000572.aspx

环境:.Net 2.0,非1.1
注意,这里用的是Login控件
为什么要自定义呢?
首先,自定义有更大的灵活性,不必过份依赖于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),取得当前用户的所有角色列表


[Copy to clipboard]CODE:
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:http://demo.lemongtree.com/default.aspx
用户名   密码
admin    admin  
guest    guest

下载:MemberShip.rar

经典论坛讨论
http://bbs.blueidea.com/thread-2698142-1-1.html

出处:蓝色理想
责任编辑:moby

◎进入论坛网络编程版块参加讨论

相关文章
Js 按照MVC模式制作自定义控件
使用有趣的自定义标记布局页面
Tag的自定义类
作者文章 更多作者文章
URL重写实现IHttpHandler接口
ASP.NET中的datagrid控件初步
ASP.NET 中数据库操作初步
Dataset初步
在ASP.NET中创建自定义控件初步
热门搜索:CSS Fireworks 设计比赛 网页制作 Dreamweaver Studio8 Flash
站点最新 站点最新列表
采访eico studio[3]
可用性日历——谈GUI禁忌
关于web标准的思考
《NewWebPick》第7期专业版
浅谈关于另类图片的DIY
Vista包装风格的光束制作
自行车车锁设计
紧急征集“青艾工程”LOGO
Asp.Net的N层模型编程探索
asp检测文件编码
栏目最新 栏目最新列表
关于web标准的思考
浅谈关于另类图片的DIY
Vista包装风格的光束制作
Asp.Net的N层模型编程探索
asp检测文件编码
自定义RoleProvider
Photoshop滤镜制作彩色拉丝效果
详细介绍IE7新支持的选择器
Photoshop人物合成技巧
介绍几个曲线图

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

本文暂时没有评论和评分

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
Don't Make Me Think 第2版
《Flash第一步系列》
《交互设计之路》
《Dreamweaver 从基础到实践》
《色彩管理》
《情感化设计》
《GUI设计禁忌》