Asp.net用户管理API的应用(转载)
2012-02-20 19:08
323 查看
Asp.net官方标准控件实现用户的管理,虽然简单,但控件封装性很强,开发人员不能明白做了什么样的调用,还用别一方面,标准控件的使用,很大程度上限制了程序的可变性。如果自开发一整套用户管理系统,可行,但又失去了标准用户控件的作用,于是用API来管理用户,成为一个很好的先择,下面我列出主要(不 全部)的用户管理API实例:
1、注册用户
用Membership.CreateUser来创建设新用户,注意密友要包含一个符号,Membership位于System.Web.Security命名空间内。
//cs
用户登录用Membershi.ValidateUser来验证用户名和密码。如果通过验证,调用FormsAuthentication.RedirectFromLoginPage导向目标页面(这里以及后面的一些设置都是配合Forms验证展开,都预先在web.config中配置好Forms的验证策略)。
//cs代码,在登录按钮的单击事件注册的方法中
//Aspx代码
3、找回密码
//cs Cs中的邮件发方法,关于一些邮件的配置是在web.confing中存放,方法中有相关的获取方法
//Aspx代码
//web.config中的配置位于configuration标签中
5、删除用户
7、修改密码
10、获取所有角色
11、创建角色
12、给用户分配角色
13、获取角色下的用户
把角色对应的用户加载到树形菜单中
现在有了用户和角色,用户和角色也能关联上了,但权限怎么办呢?角色对应的权限怎么来实现呢?权限的设置要在web.config中的验证段落来配置。比如下面的设置,是设置了只有收银员这个角色才能进入系统,其他用户都是不可以的。
这段是配置了所有用户和角色都是可以访问register.aspx页面的
1、注册用户
用Membership.CreateUser来创建设新用户,注意密友要包含一个符号,Membership位于System.Web.Security命名空间内。
//cs
try { MembershipCreateStatus MCS; Membership.CreateUser(name.Text, password.Text,email .Text ,question .Text,answer .Text ,true , out MCS ); Response.Write(MCS.ToString ()); } catch(Exception s) { //异常处理代码 }//Aspx代码
<asp:Label ID="Label1" runat="server" Text="用户名:"></asp:Label> <asp:TextBox ID="name" runat="server" Width="196px"></asp:TextBox> <asp:Label ID="Label2" runat="server" Text="密码:"></asp:Label> <asp:TextBox ID="password" runat="server" Width="197px"></asp:TextBox> <asp:Label ID="Label3" runat="server" Text="确认密码:"></asp:Label> <asp:TextBox ID="OtherPass" runat="server" Width="196px"></asp:TextBox> <asp:Label ID="Label4" runat="server" Text="电子邮件:"></asp:Label> <asp:TextBox ID="email" runat="server" Width="193px"></asp:TextBox> <asp:Label ID="Label5" runat="server" Text="安全提示问题:"></asp:Label> <asp:TextBox ID="question" runat="server" Width="189px"></asp:TextBox> <asp:Label ID="Label6" runat="server" Text="安全答案:"></asp:Label> <asp:TextBox ID="answer" runat="server" Width="187px"></asp:TextBox> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="注册" Width="69px" />2、用户登录
用户登录用Membershi.ValidateUser来验证用户名和密码。如果通过验证,调用FormsAuthentication.RedirectFromLoginPage导向目标页面(这里以及后面的一些设置都是配合Forms验证展开,都预先在web.config中配置好Forms的验证策略)。
//cs代码,在登录按钮的单击事件注册的方法中
if (Membership.ValidateUser(UserName.Text,Password.Text)) { FormsAuthentication.RedirectFromLoginPage(UserName.Text, false); } else { Response.Write("登录失败!"); }
//Aspx代码
<asp:Label ID="Label1" runat="server" Text="用户名:"></asp:Label> <asp:TextBox ID="UserNmae" runat="server"></asp:TextBox> <asp:Label ID="Label2" runat="server" Text="密码:"></asp:Label> <asp:TextBox ID="Password" runat="server"></asp:TextBox> <asp:Button ID="Login_But" runat="server" onclick="Button1_Click" Text="登录" Width="69px" /> <asp:HyperLink ID="FindPass_HL" runat="server" NavigateUrl="~/FindPassword.aspx">忘记密码</asp:HyperLink> <asp:HyperLink ID="Reg_HL" runat="server" NavigateUrl="~/register.aspx">注册</asp:HyperLink>
3、找回密码
//cs Cs中的邮件发方法,关于一些邮件的配置是在web.confing中存放,方法中有相关的获取方法
using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.Configuration; using System.Net.Configuration; using System.Net.Mail ; public partial class FindPassword : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Wizard1.ActiveStepIndex = 0; } } protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e) { try { Label1.Text = "问题是:" Membership.GetUser(Quest_TB.Text).PasswordQuestion; } catch (Exception ee) { Response.Write("异常,详细错误:" ee.Message); } } protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e) { try { Configuration c = WebConfigurationManager.OpenWebConfiguration(@"~web.config"); ; NetSectionGroup ns = NetSectionGroup.GetSectionGroup(c); string forms = ns.MailSettings.Smtp.From; string hosts = ns.MailSettings.Smtp.Network.Host; int ports = ns.MailSettings.Smtp.Network.Port; string usernames = ns.MailSettings.Smtp.Network.UserName; string passwords = ns.MailSettings.Smtp.Network.Password; MailAddress from = new MailAddress(forms); MailAddress to = new MailAddress(Membership.GetUser(TextBox1.Text).Email); MailMessage message = new MailMessage(from, to); message.Subject = "密码"; string nr = "您好:你的密码为:" Membership.GetUser(Quest_TB.Text).ResetPassword(Answer_TB.Text); message.Body = nr; SmtpClient client = new SmtpClient(hosts, ports); client.Send(message); } catch (Exception ee) { Response.Write("发送邮箱密码错误!详细信息:" ee.Message); } } }
//Aspx代码
<asp:Wizard ID="Wizard1" runat="server" ActiveStepIndex="2" DisplaySideBar="False" Height="103px" onfinishbuttonclick="Wizard1_FinishButtonClick" onnextbuttonclick="Wizard1_NextButtonClick" Width="168px"> <WizardSteps> <asp:WizardStep runat="server" title="用户名"> 请输入用户名:<br /> <asp:TextBox ID=" Quest_TB" runat="server" Width="141px"></asp:TextBox> </asp:WizardStep> <asp:WizardStep runat="server" title="问题"> <asp:Label ID="Label1" runat="server" Text="问题是:"></asp:Label> <br /> <asp:Label ID="Label2" runat="server" Text="问题:"></asp:Label> <br /> <asp:TextBox ID="Answer_TB" runat="server" Width="161px"></asp:TextBox> <br /> </asp:WizardStep> <asp:WizardStep runat="server" Title="完成"> <asp:Label ID="Label3" runat="server" Text="修改密码完成!"></asp:Label> </asp:WizardStep> </WizardSteps> </a 4000 sp:Wizard>
//web.config中的配置位于configuration标签中
<system.net> <mailSettings> <smtp from="axzxs2001@163.com"> <network host="smtp.163.com" password="*********" userName="axzxs2001" /> </smtp> </mailSettings> </system.net>4、注销用户
FormsAuthentication.SignOut();//注销用户 Roles.DeleteCookie();//清除cookie FormsAuthentication.RedirectToLoginPage();//注销后转回到登陆页
5、删除用户
string username =”用户名”; Membership.DeleteUser(username); FormsAuthentication.RedirectToLoginPage();//注销后转回到登陆页
6、修改用户信息MembershipUser MU = Membership.GetUser ();MU.Email = "axzxs2002@163.com"; Membership.UpdateUser(MU);
7、修改密码
if (Membership.GetUser().ChangePassword(OldTextBox.Text, newTextBox.Text)) { Response.Write("更改用户密码成功!"); } else { Response.Write("更改用户密码失败!"); }8、修改密码问题
if (Membership.GetUser().ChangePasswordQuestionAndAnswer(PassWordTB.Text, this.OldQuesTB.Text, NewQuesTB.Text)) { Response.Write("更改提问问题成功!"); } else { Response.Write("更改提问问题失败!"); }9、获取所有用户信息
Response.Write("当前用户:" Page.User.Identity.Name "<br >"); DataTable DT=new DataTable (); DT.Columns.Add("用户名 ", typeof(string)); DT.Columns.Add("创建时间",typeof(string)); DT.Columns.Add("Email", typeof(string)); DT.Columns.Add("是否在线", typeof(string)); DT.Columns.Add("问题", typeof(string)); DT.Columns.Add("角色",typeof(string)); foreach (MembershipUser MU in Membership.GetAllUsers()) { string js = ""; string[] jsArr = Roles.GetRolesForUser(MU.UserName); foreach (string jss in jsArr) { js = jss " "; } DT.Rows.Add(MU.UserName, MU.CreationDate, MU.Email, MU.IsOnline, MU.PasswordQuestion, js); } GridView1.DataSource = DT; GridView1.DataBind();
10、获取所有角色
string[] roseArr= Roles.GetAllRoles(); GridView2.DataSource = roseArr; GridView2.DataBind();
11、创建角色
try { Roles.CreateRole(RoseTextBox.Text); } catch (Exception me) { Response.Write(me.Message); }
12、给用户分配角色
try { Roles.AddUserToRole(usernameTB.Text ,RolseTB.Text); } catch (Exception me) { Response.Write(me.Message); }
13、获取角色下的用户
把角色对应的用户加载到树形菜单中
TreeView1.Nodes.Clear(); string[] rolesArr= Roles.GetAllRoles(); foreach (string ro in rolesArr) { TreeNode TN = new TreeNode(ro); TreeView1.Nodes.Add(TN); } for (int i=0;i<TreeView1.Nodes.Count ;i ) { string[] yh= Roles.GetUsersInRole (TreeView1.Nodes[i].Text ); foreach (string s in yh) { TreeNode TTN = new TreeNode(s); TreeView1.Nodes[i].ChildNodes.Add(TTN); } }
现在有了用户和角色,用户和角色也能关联上了,但权限怎么办呢?角色对应的权限怎么来实现呢?权限的设置要在web.config中的验证段落来配置。比如下面的设置,是设置了只有收银员这个角色才能进入系统,其他用户都是不可以的。
<authentication mode="Forms"> </authentication> <authorization > <allow roles="收银员" /> <deny users="*" /> </authorization>在权限这块,常出现的问题是一种角色,对应着一种访问权限,即一种角色具有相同的访问某些页面,这个怎么实现呢?这里可以通过配置相应的验证来实现,比如下页的实例:
<location path="register.aspx" allowOverride="true" > <system.web> <authorization > <allow users="?" /> </authorization> </system.web> </location>
这段是配置了所有用户和角色都是可以访问register.aspx页面的
相关文章推荐
- Asp.net用户管理API的应用(上)
- Asp.net用户管理API的应用(上)
- Asp.net用户管理API的应用(下)
- Asp.net用户管理API的应用(下)
- ASP.NET 用户和角色管理的API使用
- ASP.NET的用户管理API
- 七天学会ASP.NET MVC (四)——Layout页面使用和用户角色管理 (代码下载)
- 使用用户自定义控件实现asp.net的的权限管理
- 浅谈ASP.NET的权限管理和用户验证
- 浅谈ASP.NET的权限管理和用户验证(转)
- ASP.Net中自定义Http处理及应用之HttpModule篇 (转载)
- 在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据)
- ASP.NET 的用户管理
- 【转载】关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(2)
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(3)
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(4)
- asp.net 2.0 用户管理功能结构
- asp.net微信开发第五篇----用户分组管理
- [转载]WCF和ASP.NET Web API在应用上的选择