栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

自定义RoleProvider和MembershipProvider

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自定义RoleProvider和MembershipProvider

环境:.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]

[Copy to clipboard] [ - ]CODE:

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)
用于验证用户是否属于指定的角色

[Copy to clipboard] [ - ]CODE:

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验证

            


注意下面的配置,重中之重

[Copy to clipboard] [ - ]CODE:



            
                
            
        
        
            
                
            
        


注意roleManager中的enabled一定要为true,否则会失效。

[Copy to clipboard] [ - ]CODE:


        
            
                
                
            
        
    
    
        
            
                
                
            
        
    



对admin.aspx与guest.aspx做不同的角色控制

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/233517.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号