zoukankan      html  css  js  c++  java
  • 自定义RoleProvider

    自定义RoleProvider

    作者的站点: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

  • 相关阅读:
    四则运算出题器3
    《梦断代码》读书笔记
    结队开发的小程序
    四则运算程序测试
    (补)PSP三张表
    多功能四则运算出题器
    四则运算分析题
    C语言编写的随机产生四则运算测试题
    读书笔记
    四则运算(三)
  • 原文地址:https://www.cnblogs.com/angells/p/1536904.html
Copyright © 2011-2022 走看看