自定义membership的一些小程序(Login控件使用的例子)

在看2.0里的基于角色的安全技术,用了用提供的一些控件,如LOGIN控件,注册控件等,写了一些代码,贴出来给自己留个底底。

没有用它的那个自带的ASPNETDB.MDF的库,直接连接的我本地的SQL。连接代码在web.config中,在CS里直接读取。

在web.config中重新定义了membership和roleManager,指向了我自己的类,覆写了基类的一些东东。在web.config中规定了页面需要的权限,实现了分权限的浏览。

覆写了RoleProvider中的GetRolesForUser和GetAllRoles方法,用来判断我在自己数据库里定义的权限。

覆写了MembershipProvider中的Initialize、CreateUser、MinRequiredPasswordLength、RequiresQuestionAndAnswer以及ValidateUser方法,实现操作自己指定的数据库。

大概的方法就是这些了,如果自己要是想写删除更新什么的,覆写相对应的方法就好了。

具体程序代码如下,给出了MyRole.cs、MyMemberShip.cs和web.config的全部代码。前台拖拖控件就好了,代码不再给出。

MyMemberShip.cs

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Data.OleDb;
using  System.Data.SqlClient;

/// <summary>
/// MyMemberShip 的摘要说明
/// </summary>

public   class  MyMemberShip : MembershipProvider
{
    
public MyMemberShip()
    
{
        
//
        
// TODO: 在此处添加构造函数逻辑
        
//
    }


    
string connectionstring = ConfigurationManager.ConnectionStrings["SqlServices"].ConnectionString.ToString();
    
private bool _requiresQuestionAndAnswer;
    private int _minRequiredPasswordLength;

    
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
    
{
        
if (config["requiresQuestionAndAnswer"].ToLower() == "true")
        
{
            _requiresQuestionAndAnswer 
= true;
        }

        
else
        
{
            _requiresQuestionAndAnswer 
= false;
        }

        
int.TryParse(config["minRequiredPasswordLength"], out _minRequiredPasswordLength);
        
//connStr = config["connectionString"];
        base.Initialize(name, config);
    }


    
public override string ApplicationName
    
{
        
get
        
{
            
throw new Exception("The method or operation is not implemented.");
        }

        
set
        
{
            
throw new Exception("The method or operation is not implemented.");
        }

    }


    
public override bool ChangePassword(string username, string oldPassword, string newPassword)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override MembershipUser CreateUser(string username,string password,string email,string passwordQuestion,string passwordAnswer,bool isApproved,Object providerUserKey,out MembershipCreateStatus status)
    
{
        
using (SqlConnection conn = new SqlConnection(connectionstring))
        
{
            SqlCommand comm 
= new SqlCommand();
            comm.CommandText 
= "insert into users(u_name,u_pwd,u_role) values(@cname,@cpwd,@crole)";
            comm.Parameters.AddWithValue(
"@cname", username);
            comm.Parameters.AddWithValue(
"@cpwd", password);
            comm.Parameters.AddWithValue(
"@crole""guest");
            comm.Connection 
= conn;
            conn.Open();
            comm.ExecuteNonQuery();
            MembershipUser user 
= new MembershipUser("MyMemberShip", username, providerUserKey, email, passwordQuestion, "", isApproved, true, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);
            status 
= MembershipCreateStatus.Success;
            
return user;
        }


    }


    
public override bool DeleteUser(string username, bool deleteAllRelatedData)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override bool EnablePasswordReset
    
{
        
get throw new Exception("The method or operation is not implemented."); }
    }


    
public override bool EnablePasswordRetrieval
    
{
        
get throw new Exception("The method or operation is not implemented."); }
    }


    
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override int GetNumberOfUsersOnline()
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override string GetPassword(string username, string answer)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override MembershipUser GetUser(string username, bool userIsOnline)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override string GetUserNameByEmail(string email)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override int MaxInvalidPasswordAttempts
    
{
        
get throw new Exception("The method or operation is not implemented."); }
    }


    
public override int MinRequiredNonAlphanumericCharacters
    
{
        
get throw new Exception("The method or operation is not implemented."); }
    }


    
public override int MinRequiredPasswordLength
    
{
        
get return _minRequiredPasswordLength; }
    }


    
public override int PasswordAttemptWindow
    
{
        
get throw new Exception("The method or operation is not implemented."); }
    }


    
public override MembershipPasswordFormat PasswordFormat
    
{
        
get throw new Exception("The method or operation is not implemented."); }
    }


    
public override string PasswordStrengthRegularExpression
    
{
        
get throw new Exception("The method or operation is not implemented."); }
    }


    
public override bool RequiresQuestionAndAnswer
    
{
        
get return _requiresQuestionAndAnswer; }
    }


    
public override bool RequiresUniqueEmail
    
{
        
get throw new Exception("The method or operation is not implemented."); }
    }


    
public override string ResetPassword(string username, string answer)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override bool UnlockUser(string userName)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override void UpdateUser(MembershipUser user)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override bool ValidateUser(string username, string password)
    
{
        
using (SqlConnection conn = new SqlConnection(connectionstring))
        
{
            SqlCommand comm 
= new SqlCommand();
            comm.CommandText 
= "select count(0) from users where u_name=@cname and u_pwd=@cpwd";
            comm.Parameters.AddWithValue(
"@cname", username);
            comm.Parameters.AddWithValue(
"@cpwd", password);
            comm.Connection 
= conn;
            conn.Open();
            
return ((int)comm.ExecuteScalar()) > 0 ? true : false;
        }

    }

}



MyRole.cs

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Data.OleDb;
using  System.Data.SqlClient;

/// <summary>
/// MyRole 的摘要说明
/// </summary>

public   class  MyRole : RoleProvider
{
    
public MyRole()
    
{
        
//
        
// TODO: 在此处添加构造函数逻辑
        
//
    }


    
string connectionstring = ConfigurationManager.ConnectionStrings["SqlServices"].ConnectionString.ToString();

    
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override string ApplicationName
    
{
        
get
        
{
            
throw new Exception("The method or operation is not implemented.");
        }

        
set
        
{
            
throw new Exception("The method or operation is not implemented.");
        }

    }


    
public override void CreateRole(string roleName)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override string[] FindUsersInRole(string roleName, string usernameToMatch)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override string[] GetAllRoles()
    
{
        
return new string[] "admin""guest" };
    }


    
public override string[] GetRolesForUser(string username)
    
{
        
string[] tmp = new string[] { };
        
using (SqlConnection conn = new SqlConnection(connectionstring))
        
{
            SqlCommand comm 
= new SqlCommand();
            comm.CommandText 
= "select top 1 * from users where u_name=@name";
            comm.Parameters.AddWithValue(
"@name", username);

            comm.Connection 
= conn;
            conn.Open();
            
using (SqlDataReader dr = comm.ExecuteReader())
            
{
                
if (dr.Read())
                
{

                    tmp 
= dr["U_role"].ToString().Split(',');

                }


            }

            conn.Close();
        }

        
return tmp;
    }


    
public override string[] GetUsersInRole(string roleName)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override bool IsUserInRole(string username, string roleName)
    
{
        
using (SqlConnection conn = new SqlConnection(connectionstring))
        
{
            SqlCommand comm 
= new SqlCommand();
            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 (SqlDataReader dr = comm.ExecuteReader())
            
{
                
if (dr.HasRows)
                
{

                    
return true;

                }

                
return false;
            }

        }

    }


    
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }


    
public override bool RoleExists(string roleName)
    
{
        
throw new Exception("The method or operation is not implemented.");
    }

}


web.config

<? xml version="1.0" ?>
< configuration >
    
< appSettings />
  
< connectionStrings >
    
< add  name ="SqlServices"  connectionString ="server=;database=;uid=;pwd=;"
        providerName
="System.Data.SqlClient"   />
  
</ connectionStrings >
    
< system .web >
  
< compilation  debug ="true" />
    
< authentication  mode ="Forms" >
      
< forms  defaultUrl ="default.aspx"  loginUrl ="userlogin.aspx"  path ="/"  name ="mytest" />
    
</ authentication >
    
< membership  defaultProvider ="MyMemberShip"  userIsOnlineTimeWindow ="20" >
      
< providers >
        
< remove  name ="AspNetSqlProvider"   />
        
< add  name ="MyMemberShip"
          type
="MyMemberShip"
          connectionStringName
="SqlServices"
          enablePasswordRetrieval
="false"
          enablePasswordReset
="true"
          requiresQuestionAndAnswer
="true"
          passwordFormat
="Hashed"
          applicationName
="/"   />
      
</ providers >
    
</ membership >
    
< roleManager  defaultProvider ="MyRole"  enabled ="true" >
      
< providers >
        
< add  name ="MyRole"  type ="MyRole" />
      
</ providers >
    
</ roleManager >
    
</ system.web >

  
< 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 >
</ configuration >


User.Identity.Name可以直接得到登录的名称,有一定的声明周期,可以在WEB.CONFIG中进行修改。

admin.aspx.cs

public  partial  class  admin : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        Response.Write(
"您的登录名称:" + User.Identity.Name + " <br>权限为:");
        
foreach (string s in Roles.GetRolesForUser())
        
{
            Response.Write(
"<li>" + s + "</li>");
        }

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值