C#温故知新ASP.NET 2.0(C#)(6) – Membership&RoleManager(成员身价和角色管理)

[索引页]
[源码下载]

温故知新ASP.NET 2.0(C#)(6) – Membership&RoleManager(成员身价和角色管理)

作者:webabcd

介绍
现行 ASP.NET 2.0
提供了对成员身价(用户名/密码凭据存储)和角色管理服务的放权帮忙。由于具备这个服务都是提供程序使得的(Provider),因而得以一本万利地用你自己的自定义落成替换。

关键
1、基于Windows的身份验证将<system.web>元素下的<authentication>
设置为
Windows;基于Forms的身份验证将<system.web>元素下的<authentication>
设置为 Forms。

2、基于Forms的身份验证时,设置<system.web>元素下的<authentication>
元素的 <forms> 子元素,示例如下,仅为求证

C# 1    <authentication mode=”Forms”>
C# 2
C# 3      <forms name=”.VS2005_Form” loginUrl=”~/Security/Login.aspx” defaultUrl=”~/Default.aspx”
C# 4          protection=”All” timeout=”30″ path=”/” requireSSL=”false”
C# 5          slidingExpiration=”true” enableCrossAppRedirects=”false”
C# 6          cookieless=”UseDeviceProfile”>
C# 7      </forms>
C# 8
C# 9    </authentication>
C# 10

<forms>元素的习性表达如下
1) cookieless – 身份验证可以将 Forms 身份验证票存储在 Cookie
中也足以以无 Cookie 的代表方式储存在 URL 上。有效值如下:
  ·UseDeviceProfile – 默许值表示 ASP.NET
根据预先总计得到的浏览器配置文件来确定存储票证的位置。
  ·AutoDetect – 选项使 ASP.NET 动态确定浏览器是否辅助 库克(Cook)ie。
  ·UseUri – 强制履行无 库克(Cook)ie 票证 
  ·UseCookies – 强制实施有 库克ie 票证。
2) defaultUrl – 指定在成功登录后,请求将重定向到的默许 URL。
3) domain – 指定包涵 Forms 身份验证票的 HttpCookie 的 Domain
属性的值。显式设置此属性可使应用程序共享同一个
库克ie,前提是那些应用程序共享某个 DNS
命名空间的一个集体部分(例如,即使 domain 属性设置为“cnblogs.com”,则
webabcd.cnblogs.com 和 dudu.cnblogs.com可以共享一个 库克ie)。
4) enableCrossAppRedirects – Forms 身份验证允许以询问字符串变量或窗体
POST 变量的款型在应用程序之间传递 Forms身份验证票。将此属性设置为 true
可使 FormsAuthenticationModule 可以从询问字符串或窗体 POST
变量提取票证。
5) loginUrl – 指定未经身份验证的用户的请求将被重定向到的 URL。该 URL
可以在同一台微机上或在长距离统计机上。纵然是在长途总括机上,则两台电脑上
machineKey 配置元素中的 decryptionkey 和 validationKey
属性都亟需接纳相同的值。
6) name – 用于身份验证的 HTTP 库克ie
的称谓。注意,若是多少个应用程序需求在一台电脑上使用基于窗体的身份验证服务,并且每个应用程序都期待由应用程序隔离
Forms 身份验证 库克(Cook)ie,则每个应用程序都应配备一个唯一的 库克ie
值。为幸免在 URL 中爆发敬重项,在安装身份验证 Cookie 时,ASP.NET
还利用“/”作为 Path 值,以便将那一个 库克ie 发送回站点上的各类应用程序。
7) path – 用于暴发的 Cookie
的路线。默许值为“/”,以防止路径中大小写不包容的造成的狼狈,因为在重返Cookie
时,浏览器是严刻区分轻重缓急写的。共享服务器环境中的应用程序应利用此命令来保证专用
库克ie。(它们还足以接纳 API 在运转时指定路线来暴发 库克(Cook)ie。)
8) protection – 用于维护 Cookie 数据的主意。有效值如下: 
  ·All – 同时使用数据证实和加密来有限支撑 库克(Cook)ie。所安顿的数额印证算法是按照<machinekey> 元素的。假如密钥丰裕长(48 个字符),默许情状下将选用AES 举办加密。All 是默许(和指出)值。 
  ·None – 用于仅将 Cookie
用于个性化设置并且安全性须要不高的站点。加密和验证都得以被剥夺。固然以此措施采用库克ie 需谨慎,但对此利用 .NET Framework
达成个性化设置的此外措施,此设置提供了极品性能。 
  ·Encryption – 使用 AES、TripleDES 或 DES 加密 库克ie,但不对 Cookie
进行数量证实。这类 库克ie 不难受到密切挑选的纯文本的口诛笔伐。
  ·Validation – 不加密 Cookie 的内容,但验证 库克(Cook)ie
数据在传输进度中是否未被改动。若要创制 Cookie,验证密钥在缓冲区中与
库克(Cook)ie 数据连接,并且统计出 MAC 并将其扩大到输出的 Cookie。
9) requireSSL – 要是设置为 true,则 Forms 身份验证会设置 Forms 身份验证
库克(Cook)ie 的四平位。包容的浏览器只将 库克ie 通过 SSL 连接发送回
ASP.NET。注意,要是选用无 Cookie Forms 身份验证,则此设置无效。
10) slidingExpiration – 若是设置为 true,则 Forms 身份验证将定期更新
Forms 身份验证票的生存期。无论票证是富含在 Cookie 中,依然以无 库克(Cook)ie
的格式包罗在 URL 中,都会进展此操作。
11) timeout – 时间量(以平头分钟为单位),经过该时间量之后,库克(Cook)ie
则会晚点。默许值是
30。超时属性是一个可调值,从收到上次呼吁的时刻伊始揣摸,它将在 n
分钟后过期。为了防止对性能发生负面影响,也为了防止那多少个打开了 Cookie
警告的应用程序爆发三个浏览器警告,库克(Cook)ie
在逾期时间过半时更新。(那表示在少数景况下或者会冒出精度损失。)
(注意:createPersistentCookie为true的话,则该属性失效,过期时间将为50年)

3、授权用户和角色设置<system.web>元素下的<authorization>元素,示例如下,仅为讲明

C# 11<authorization>
C# 12    <allow VERB=”POST” users=”webabcd@gmail.com” />
C# 13    <allow roles=”admin” />
C# 14    <deny users=”*” />
C# 15    <allow VERB=”GET” users=”abc,xyz” />
C# 16    <deny users=”?” />
C# 17</authorization>

注:可以把授权用户和角色设置的安顿写在某个文件夹内,则所做的布局只出力于该公文夹内,自动一连外面的布署。
allow – 允许
deny – 拒绝
users – 用户(多用户用逗号隔开)
roles – 角色(多角色用逗号隔开)
verb – 指定http方法,post或get
* – 所有用户
? – 匿名(未通过身份验证的)用户

4、分路径设置授权用户和角色设置,示例如下,仅为求证

C# 18    <location path=”folder”>
C# 19        <system.web>
C# 20            <authorization>
C# 21                <deny users=”?”/>
C# 22                <allow users=”*”/>
C# 23            </authorization>
C# 24        </system.web>
C# 25    </location>
C# 26    
C# 27    <location path=”abc.aspx”>
C# 28        <system.web>
C# 29            <authorization>
C# 30                <allow roles=”Administrators” />
C# 31                <deny users=”*”/>
C# 32            </authorization>
C# 33        </system.web>
C# 34    </location>

<location>元素的path属性可以是文本夹也可以是某一文件

5、<membership>元素设置,示例如下,仅为证实

C# 35    <membership defaultProvider=”SqlMembershipProvider”>
C# 36      <providers>
C# 37        <clear/>
C# 38        <add name=”SqlMembershipProvider”
C# 39             type=”System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”
C# 40             connectionStringName=”SqlConnectionString”
C# 41             enablePasswordRetrieval=”false”
C# 42             enablePasswordReset=”true”
C# 43             requiresQuestionAndAnswer=”false”
C# 44             applicationName=”/”
C# 45             requiresUniqueEmail=”false”
C# 46             passwordFormat=”Hashed”
C# 47             maxInvalidPasswordAttempts=”3″
C# 48             minRequiredPasswordLength=”3″
C# 49             minRequiredNonalphanumericCharacters=”0″
C# 50             passwordAttemptWindow=”10″
C# 51             passwordStrengthRegularExpression=”” />
C# 52      </providers>
C# 53    </membership>

enablePasswordRetrieval – 是否可以查找用户密码(总是false)
enablePasswordReset – 是否同意用户重置其密码
requiresQuestionAndAnswer – 是否需求在开立用户时提供密码提醒问题和答案
applicationName – 自定义成员身价提供程序的应用程序的称号
requiresUniqueEmail – 电子邮件地址是不是必须是唯一的
passwordFormat – 存储的密码的格式
maxInvalidPasswordAttempts –
指定允许的不算密码或无效密码提示问题答案尝试的次数。当无效尝试的次数高达布局的值时,将锁定该成员身价用户
minRequiredPasswordLength – 密码所必要的蝇头长度
minRequiredNonalphanumericCharacters –
有效密码中必须包涵的最少特殊字符数
passwordAttemptWindow –
跟踪失利的品味所用的光阴(以分钟为单位)。每当暴发另一遍破产时都将重置窗口。假诺达到了允许的无效密码或密码提醒问题答案的最大尝试次数,将锁定成员身价用户
passwordStrengthRegularExpression – 用于注解密码的正则表明式

6、<roleManager>元素设置,示例如下,仅为求证

C# 54    <roleManager defaultProvider=”SqlRoleProvider”
C# 55      enabled=”true”
C# 56      cacheRolesInCookie=”true”
C# 57      cookieName=”.VS2005_Role”
C# 58      cookieTimeout=”30″
C# 59      cookiePath=”/”
C# 60      cookieRequireSSL=”false”
C# 61      cookieSlidingExpiration=”true”
C# 62      cookieProtection=”All”>
C# 63      <providers>
C# 64        <add
C# 65          name=”SqlRoleProvider”
C# 66          type=”System.Web.Security.SqlRoleProvider”
C# 67          connectionStringName=”SqlConnectionString”
C# 68          applicationName=”/” />
C# 69      </providers>
C# 70    </roleManager>

各属性详细表达参看MSDN,索引处查找“roleManager 元素”

7、使用加密密码

C# 71<authentication>
C# 72    <credentials passwordFormat=”SHA1″ >
C# 73        <user name=”Mary” password=”94F85995C7492EEC546C321821AA4BECA9A3E2B1″/>
C# 74        <user name=”John” password=”5753A498F025464D72E088A9D5D6E872592D5F91″/>
C# 75    </credentials>
C# 76</authentication>

采取FormsAuthentication.HashPasswordForStoringInConfigFile(String
password, String passwordFormat)生成密码
Clear – 密码以公开方式储存
SHA1 – 密码存储为 SHA1 摘要
MD5 – 密码存储为 MD5 摘要

8、使用用户帐户模拟,在<system.web>元素下加如下元素

C# 77<identity impersonate=”true” username=”” password=”” />

9、常用的就是之类那几个东东
System.Web.Security.Membership,System.Web.Security.MembershipUser,System.Web.Security.Roles,Page.User
FormsAuthentication.RedirectFromLoginPage,FormsAuthentication.SetAuthCookie,FormsAuthentication.SignOut
重写那一个Provider的话,参看源码中微软提供的演示

示例
读取用户名和表达类型
Security/Test.aspx

C# 78C# 79<%C# 80@ Page Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true” CodeFile=”Test.aspx.cs”
C# 81    Inherits=”Security_Test” Title=”读取用户名和注脚类型” %>
C# 82
C# 83<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
C# 84    <p>
C# 85        用户名称:
C# 86        <%=User.Identity.Name %>
C# 87        <br />
C# 88        验证类型:
C# 89        <%=User.Identity.AuthenticationType %>
C# 90    </p>
C# 91</asp:Content>
C# 92

Membership测试
App_Code/User.cs

C# 93using System;
C# 94using System.Data;
C# 95using System.Configuration;
C# 96using System.Web;
C# 97using System.Web.Security;
C# 98using System.Web.UI;
C# 99using System.Web.UI.WebControls;
C# 100using System.Web.UI.WebControls.WebParts;
C# 101using System.Web.UI.HtmlControls;
C# 102
C# 103using System.ComponentModel;
C# 104
C# 105C# 106/**//// <summary>
C# 107/// User 的摘要表达
C# 108/// </summary>
C# 109[DataObject(true)]
C# 110public class User
C# 111C# 112C# 113{
C# 114    public User()
C# 115C# 116    C# 117{
C# 118        //
C# 119        // TODO: 在那边添加构造函数逻辑
C# 120        //
C# 121    }
C# 122
C# 123C# 124    /**//// <summary>
C# 125    /// 得到所有用户
C# 126    /// </summary>
C# 127    /// <returns></returns>
C# 128    [DataObjectMethod(DataObjectMethodType.Select, true)]
C# 129    public MembershipUserCollection GetMembers()
C# 130C# 131    C# 132{
C# 133        MembershipUserCollection muc = Membership.GetAllUsers();
C# 134        return muc;
C# 135    }
C# 136
C# 137C# 138    /**//// <summary>
C# 139    /// 删除用户
C# 140    /// </summary>
C# 141    /// <returns></returns>
C# 142    [DataObjectMethod(DataObjectMethodType.Delete, true)]
C# 143    public void DeleteMember(string username)
C# 144C# 145    C# 146{
C# 147        Membership.DeleteUser(username, true);
C# 148    }
C# 149}
C# 150

Security/User.aspx

C# 151C# 152<%C# 153@ Page Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true” CodeFile=”User.aspx.cs”
C# 154    Inherits=”Security_User” Title=”Membership测试” %>
C# 155
C# 156<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
C# 157    <p>
C# 158        <asp:Label ID=”lblMsg” runat=”Server” ForeColor=”red” />
C# 159    </p>
C# 160    <p>
C# 161        用户名:
C# 162        <asp:TextBox ID=”txtUsername” runat=”server”></asp:TextBox>
C# 163    </p>
C# 164    <p>
C# 165        密    码:
C# 166        <asp:TextBox ID=”txtPassword” runat=”server”></asp:TextBox>
C# 167    </p>
C# 168    <p>
C# 169        <asp:Button ID=”btnSubmit” runat=”server” Text=”添加” OnClick=”btnSubmit_Click” />
C# 170    </p>
C# 171    <p>
C# 172        <asp:GridView ID=”GridView1″ runat=”server” DataKeyNames=”UserName” AutoGenerateColumns=”False”
C# 173            DataSourceID=”ObjectDataSource1″>
C# 174            <Columns>
C# 175                <asp:CommandField ShowDeleteButton=”True” />
C# 176                <asp:BoundField DataField=”ProviderName” HeaderText=”ProviderName” ReadOnly=”True”
C# 177                    SortExpression=”ProviderName” />
C# 178                <asp:CheckBoxField DataField=”IsOnline” HeaderText=”IsOnline” ReadOnly=”True” SortExpression=”IsOnline” />
C# 179                <asp:BoundField DataField=”LastPasswordChangedDate” HeaderText=”LastPasswordChangedDate”
C# 180                    ReadOnly=”True” SortExpression=”LastPasswordChangedDate” />
C# 181                <asp:BoundField DataField=”PasswordQuestion” HeaderText=”PasswordQuestion” ReadOnly=”True”
C# 182                    SortExpression=”PasswordQuestion” />
C# 183                <asp:CheckBoxField DataField=”IsLockedOut” HeaderText=”IsLockedOut” ReadOnly=”True”
C# 184                    SortExpression=”IsLockedOut” />
C# 185                <asp:BoundField DataField=”Comment” HeaderText=”Comment” SortExpression=”Comment” />
C# 186                <asp:BoundField DataField=”UserName” HeaderText=”UserName” ReadOnly=”True” SortExpression=”UserName” />
C# 187                <asp:BoundField DataField=”Email” HeaderText=”Email” SortExpression=”Email” />
C# 188                <asp:BoundField DataField=”CreationDate” HeaderText=”CreationDate” ReadOnly=”True”
C# 189                    SortExpression=”CreationDate” />
C# 190                <asp:CheckBoxField DataField=”IsApproved” HeaderText=”IsApproved” SortExpression=”IsApproved” />
C# 191                <asp:BoundField DataField=”LastLockoutDate” HeaderText=”LastLockoutDate” ReadOnly=”True”
C# 192                    SortExpression=”LastLockoutDate” />
C# 193                <asp:BoundField DataField=”LastLoginDate” HeaderText=”LastLoginDate” SortExpression=”LastLoginDate” />
C# 194                <asp:BoundField DataField=”LastActivityDate” HeaderText=”LastActivityDate” SortExpression=”LastActivityDate” />
C# 195            </Columns>
C# 196        </asp:GridView>
C# 197        <asp:ObjectDataSource ID=”ObjectDataSource1″ runat=”server” SelectMethod=”GetMembers”
C# 198            TypeName=”User” DeleteMethod=”DeleteMember”>
C# 199            <DeleteParameters>
C# 200                <asp:Parameter Name=”username” Type=”String” />
C# 201            </DeleteParameters>
C# 202        </asp:ObjectDataSource>
C# 203    </p>
C# 204    <p>
C# 205        备注:<br />
C# 206        用户和角色里面的操作如下<br />
C# 207        Roles.AddUserToRole – 向角色添加用户<br />
C# 208        Roles.RemoveUserFromRole – 从角色删除用户<br />
C# 209        Roles.GetRolesForUser – 用户所属的角色列表<br />
C# 210    </p>
C# 211</asp:Content>
C# 212

Security/User.aspx.cs

C# 213using System;
C# 214using System.Data;
C# 215using System.Configuration;
C# 216using System.Collections;
C# 217using System.Web;
C# 218using System.Web.Security;
C# 219using System.Web.UI;
C# 220using System.Web.UI.WebControls;
C# 221using System.Web.UI.WebControls.WebParts;
C# 222using System.Web.UI.HtmlControls;
C# 223
C# 224public partial class Security_User : System.Web.UI.Page
C# 225C# 226C# 227{
C# 228    protected void Page_Load(object sender, EventArgs e)
C# 229C# 230    C# 231{
C# 232
C# 233    }
C# 234
C# 235    protected void btnSubmit_Click(object sender, EventArgs e)
C# 236C# 237    C# 238{
C# 239        MembershipCreateStatus status;
C# 240        Membership.CreateUser(txtUsername.Text.Trim(), txtPassword.Text.Trim(), null, null, null, true, out status);
C# 241
C# 242        string strInsertMessage = “”;
C# 243
C# 244        switch (status)
C# 245C# 246        C# 247{
C# 248            case MembershipCreateStatus.Success:
C# 249
C# 250                break;
C# 251            case MembershipCreateStatus.DuplicateUserName:
C# 252                strInsertMessage = “用户名重复”;
C# 253                break;
C# 254            case MembershipCreateStatus.InvalidUserName:
C# 255                strInsertMessage = “用户名输入错误”;
C# 256                break;
C# 257            case MembershipCreateStatus.InvalidPassword:
C# 258                strInsertMessage = “密码输入不符合须要”;
C# 259                break;
C# 260            default:
C# 261                strInsertMessage = “出现未知错误”;
C# 262                break;
C# 263        }
C# 264
C# 265        if (strInsertMessage != “”)
C# 266C# 267        C# 268{
C# 269            lblMsg.Text = strInsertMessage;
C# 270        }
C# 271        else
C# 272C# 273        C# 274{
C# 275            lblMsg.Text = “注册成功”;
C# 276            GridView1.DataBind();
C# 277        }
C# 278    }
C# 279}
C# 280
C# 281

RoleManager测试
App_Code/Role.cs

C# 282using System;
C# 283using System.Data;
C# 284using System.Configuration;
C# 285using System.Web;
C# 286using System.Web.Security;
C# 287using System.Web.UI;
C# 288using System.Web.UI.WebControls;
C# 289using System.Web.UI.WebControls.WebParts;
C# 290using System.Web.UI.HtmlControls;
C# 291
C# 292using System.Collections.Generic;
C# 293using System.ComponentModel;
C# 294
C# 295C# 296/**//// <summary>
C# 297/// Role 的摘要表明
C# 298/// </summary>
C# 299[DataObject(true)]
C# 300public class Role
C# 301C# 302C# 303{
C# 304    public Role()
C# 305C# 306    C# 307{
C# 308        //
C# 309        // TODO: 在此间添加构造函数逻辑
C# 310        //
C# 311    }
C# 312
C# 313C# 314    /**//// <summary>
C# 315    ///  得到所有角色
C# 316    /// </summary>
C# 317    /// <param name=”userName”>用户名称</param>
C# 318    /// <returns></returns>
C# 319    [DataObjectMethod(DataObjectMethodType.Select, true)]
C# 320    static public List<RoleData> GetRoles()
C# 321C# 322    C# 323{
C# 324        RoleData r = null;
C# 325        List<RoleData> roleList = new List<RoleData>();
C# 326        string[] ary = Roles.GetAllRoles();
C# 327
C# 328        foreach (string s in ary)
C# 329C# 330        C# 331{
C# 332            r = new RoleData();
C# 333            r.RoleName = s;
C# 334
C# 335            roleList.Add(r);
C# 336        }
C# 337
C# 338        return roleList;
C# 339    }
C# 340
C# 341C# 342    /**//// <summary>
C# 343    /// 删除角色
C# 344    /// </summary>
C# 345    /// <param name=”roleName”>角色名称</param>
C# 346    [DataObjectMethod(DataObjectMethodType.Delete, true)]
C# 347    static public void DeleteRole(string roleName)
C# 348C# 349    C# 350{
C# 351        MembershipUserCollection muc = Membership.GetAllUsers();
C# 352        string[] allUserNames = new string[1];
C# 353
C# 354        foreach (MembershipUser mu in muc)
C# 355C# 356        C# 357{
C# 358            if (Roles.IsUserInRole(mu.UserName, roleName))
C# 359C# 360            C# 361{
C# 362                allUserNames[0] = mu.UserName;
C# 363                Roles.RemoveUsersFromRole(allUserNames, roleName);
C# 364            }
C# 365        }
C# 366        Roles.DeleteRole(roleName);
C# 367    }
C# 368}
C# 369
C# 370C# 371/**//// <summary>
C# 372/// 角色的实体类
C# 373/// </summary>
C# 374public class RoleData
C# 375C# 376C# 377{
C# 378    protected string _roleName;
C# 379
C# 380C# 381    /**//// <summary>
C# 382    /// 角色名称 关键字
C# 383    /// </summary>
C# 384    [DataObjectField(true)]
C# 385    public string RoleName
C# 386C# 387    C# 388{
C# 389C# 390        get C# 391{ return this._roleName; }
C# 392C# 393        set C# 394{ this._roleName = value; }
C# 395    }
C# 396}
C# 397

Security/Role.aspx

C# 398C# 399<%C# 400@ Page Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true” CodeFile=”Role.aspx.cs”
C# 401    Inherits=”Security_Role” Title=”RoleManager测试” %>
C# 402
C# 403<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
C# 404    <p>
C# 405        <asp:Label ID=”lblMsg” runat=”Server” ForeColor=”red” />
C# 406    </p>
C# 407    <p>
C# 408        角色名:
C# 409        <asp:TextBox ID=”txtRolename” runat=”server”></asp:TextBox>
C# 410    </p>
C# 411    <p>
C# 412        <asp:Button ID=”btnSubmit” runat=”server” Text=”添加” OnClick=”btnSubmit_Click” />
C# 413    </p>
C# 414    <p>
C# 415        <asp:GridView ID=”GridView1″ runat=”server” DataKeyNames=”RoleName” DataSourceID=”ObjectDataSource1″ AutoGenerateColumns=”False”>
C# 416            <Columns>
C# 417                <asp:CommandField ShowDeleteButton=”True” />
C# 418                <asp:BoundField DataField=”RoleName” HeaderText=”RoleName” ReadOnly=”True”
C# 419                    SortExpression=”RoleName” />
C# 420            </Columns>
C# 421        </asp:GridView>
C# 422        <asp:ObjectDataSource ID=”ObjectDataSource1″ runat=”server” DeleteMethod=”DeleteRole”
C# 423            SelectMethod=”GetRoles” TypeName=”Role”>
C# 424            <DeleteParameters>
C# 425                <asp:Parameter Name=”roleName” Type=”String” />
C# 426            </DeleteParameters>
C# 427        </asp:ObjectDataSource>
C# 428    </p>
C# 429    <p>
C# 430         备注:<br />
C# 431         用户和角色里面的操作如下<br />
C# 432         Roles.AddUserToRole – 向角色添加用户<br />
C# 433         Roles.RemoveUserFromRole – 从角色删除用户<br />
C# 434         Roles.GetRolesForUser – 用户所属的角色列表<br />
C# 435    </p>
C# 436</asp:Content>
C# 437

Security/Role.aspx.cs

C# 438using System;
C# 439using System.Data;
C# 440using System.Configuration;
C# 441using System.Collections;
C# 442using System.Web;
C# 443using System.Web.Security;
C# 444using System.Web.UI;
C# 445using System.Web.UI.WebControls;
C# 446using System.Web.UI.WebControls.WebParts;
C# 447using System.Web.UI.HtmlControls;
C# 448
C# 449public partial class Security_Role : System.Web.UI.Page
C# 450C# 451C# 452{
C# 453    protected void Page_Load(object sender, EventArgs e)
C# 454C# 455    C# 456{
C# 457
C# 458    }
C# 459
C# 460    protected void btnSubmit_Click(object sender, EventArgs e)
C# 461C# 462    C# 463{
C# 464        if (Roles.RoleExists(txtRolename.Text.Trim()))
C# 465C# 466        C# 467{
C# 468            lblMsg.Text = “该角色已存在”;
C# 469        }
C# 470        else
C# 471C# 472        C# 473{
C# 474            Roles.CreateRole(txtRolename.Text.Trim());
C# 475            GridView1.DataBind();
C# 476        }
C# 477    }
C# 478}
C# 479

注:需要用aspnet_regsql配置数据库

OK
[源码下载]
 

相关文章