ITPub博客

首页 > IT职业 > IT职场 > 自定义RoleProvider和MembershipProvider

自定义RoleProvider和MembershipProvider

IT职场 作者:ricky0621 时间:2021-09-09 09:15:04 0 删除 编辑

环境:.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做不同的角色控制

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3829/viewspace-2801224/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-27

  • 博文量
    0
  • 访问量
    1075