建立和使用角色

角色用于将用户分组,统一进行授权和认证。如果将用户赋予某个角色,则该用户获得了该角色的所有权限。ASP.NET2.0的角色是用提供程序模型设计模式构建的。

不使用角色的网站其角色管理默认情况下是禁用的。可以在web.config中启用角色管理。

<roleManager enabled="true" cacheRolesInCookie="true" cookieName="WebSiteRoles" />

启用了客户端cookie中的缓存(不用每次Web请求都从数据库中获取角色信息),推荐设置。

System.Web.Security.Roles类中最重要的几个静态方法:

1)         AddUsersToRole():将多个用户加入一个角色
2)         AddUsersToRoles():将多个用户加入多个角色
3)         AddUserToRole():将一个用户加入一个角色
4)         AddUserToRoles():将一个用户加入多个角色
5)         CreateRole():创建角色
6)         DeleteRole():删除角色
7)         FindUsersInRole():寻找某个角色中的所有用户
8)         GetAllRoles():取得所有角色的清单
9)         GetRolesForUser():取得用户所属角色的清单
10)      IsUserInRole():指出用户是否在指定的角色中
11)      RemoveUserFromRole():从一个角色中移除一个用户
12)      RemoveUserFromRoles():从多个角色中移出一个用户
13)      RemoveUsersFromRole():从一个角色中移除多个用户
14)      RemoveUsersFromRoles():从多个角色中移除多个用户名
15)      RoleExists():用户角色名是否已存在于角色表中。

SQL Server提供程序对aspnet_Roles表和aspnet_UsersInRoles表进行数据存储。

通过角色对页面和功能进行限制访问

1:代码式

   Roles.IsUserInRole(“Administrator”) <=> this.User.IsInRole(“Administrator”)

2:定义式(web.config中配置)

作用:将当前文件夹中页面(现有两个页面)的访问权限赋予了Administrators角色中的用户。其它用户禁止访问。

或者:也可以在根目录的web.config中通过使用<location>达到相同的效果!

注意:<location>的path属性可以设置为子文件夹的名称或某个页面的虚拟路径

找回到LoginView控件:[该控件用法请看上一篇文章:http://www.cnblogs.com/netxiaochong/archive/2011/12/25/2301024.html]

LoginView除了可针对匿名用户和登录用户显示不同的模板外,也可以针对特定角色的用户显示定义好的模板。

如果:当前登录用户也属于管理员角色,LoginView控件只会显示<asp:RoleGroup Roles=”Administrators”>中的内容,

而不是<LoggedInTemplate>中的内容。

接下来,我们测试一下:

运行页面:

此时用户[张鲁鲁]先登录,看效果:

点击[分配用户]按钮,再次重新打开该页面,再次登录,看效果!

同样,可以测试一下角色BackSys

如果你要问:如果该用户同时拥有这两个角色,到底显示<LoginView>的哪一个角色模板呢?

经测试:发现匹配<RoleGroups>的从上至下的顺序的第一个模板!

参照:

改动本网站根目录的web.config对应内容:

<roleManager enabled="true" defaultProvider="MyWebSite_RoleProvider" cacheRolesInCookie="true" cookieName="WebSiteRoles" >
        <providers>
          <add name="MyWebSite_RoleProvider" connectionStringName="LocalSqlServer" applicationName="/"
              type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, 
                    PublicKeyToken=b03f5f7f11d50a3a" />
        </providers>
      </roleManager>
posted @ 2011-12-25 18:59  net小虫  阅读(238)  评论(0编辑  收藏  举报