您的位置:首页 > 运维架构 > 网站架构

TheBeerHouse 网站项目学习笔记(4)----安全管理(下)

2008-11-19 11:08 441 查看
前述文章: TheBeerHouse 网站项目学习笔记(1)----换肤技术

TheBeerHouse 网站项目学习笔记(2)----个性化管理

TheBeerHouse 网站项目学习笔记(3)----安全管理(上)

必备知识文章:ASP.NET 2.0下实现匿名用户向注册用户的迁移(上)

ASP.NET 2.0下实现匿名用户向注册用户的迁移(下)

摘要: 安全管理是网站设计不可回避的问题,也是网站设计的重用组成部分.这些组成部分都需要对不同的用户进行识别,检查用户是否有权限对那些受限制的网页进行访问,这种方法称为认证(authentication).决定用户可以对哪些内容进行访问,这种方法称为授权(authorization).这两个概念容易弄混淆,那么可以这么来理解: 认证---你是谁? 授权---我已经知道你是谁,你可以做什么? 认证和授权是网站成员权限管理的一部分,包括创建新用户,用户证书管理(包括密码保护机制,例如为遗忘密码的用户进行密码恢复)以及与账户关联的角色管理.通过MS为我们提供的内置权限管理,我们可以快速建立整套网站的权限管理系统.上篇主要讨论"你是谁",下篇主要讨论"我已经知道你是谁,你可以做什么"

那么此下篇主要从以下三个个方面讨论权限问题,其实这些问题都是一些现象,通过这些现象查看后面的本质:

1. 不同角色的用户可以看到不同的菜单项目

2. 各个页面都有自己可以被访问的角色设置

3. 某个权限和另一个权限的角色之间的界限 / 不同的角色用户对同一个页面具有的操作项目不同


其实上面的三个部分都是对你可以干什么进行讨论.

一. 不同角色的用户可以看到不同的菜单项目

讨论这个现象假定我们已经熟悉如下知识点:导航控件Menu的使用,网站地图的格式以及两者之间的关系

这个现象就是匿名用户或非管理员一般用户登录后,只能看到如下菜单:

<?xml version="1.0" encoding="utf-8" ?>

2<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" enableLocalization ="true" >

3 <siteMapNode title="Home" url="~/Default.aspx">

4

5 <siteMapNode title="Articles" url="~/ShowCategories.aspx">

6 <siteMapNode title="Browse" url="~/BrowseArticles.aspx" />

7 </siteMapNode>

8

9 <siteMapNode title="Admin" url="~/Admin/Default.aspx" roles="Administrators">

10 <siteMapNode title="Manage Users" url="~/Admin/ManageUsers.aspx" >

11 <siteMapNode title="Edit User" url="~/Admin/EditUser.aspx" />

12 </siteMapNode>

13 </siteMapNode>

14

15 </siteMapNode>

16</siteMap>
如上图黄色高亮显示部分. title="Admin" 用于显示菜单的文字,url="~/Admin/Default.aspx" 指向该菜单的超链接的相对地址,此时已经进入了后台管理的目录Admin目录了.roles="Administrators"是控制角色访问的关键,即该菜单选项只能由角色Administrator访问,又如上面的菜单Articles节点说明(第5行)中就没有Roles的说明,表明此页所有人都可以访问,实践证明,Articles菜单匿名,非匿名,管理员等角色都可以点击访问的. 上面代码中的10行,11行的作用是在"面包屑"导航菜单中显示导航名和链接的地址,如下图:

<system.web>

<authorization>

<allow roles="Administrators,Editors" />

<deny users="*" />

</authorization>

</system.web>

<location path="Default.aspx">

<system.web>

<authorization>

<allow roles="Administrators,Editors,Contributors,Moderators,StoreKeepers" />

<deny users="*" />

</authorization>

</system.web>

</location>

<location path="AddEditProduct.aspx">

<system.web>

<authorization>

<allow roles="Administrators,StoreKeepers" />

<deny users="*" />

</authorization>

</system.web>

</location>

此代码截取自Admin目录,即管理员目录下的配置文件Web.Config前几行, authorization 配置节表明本目录中的所有网页拒绝任何匿名访问,允许具有Administrators 和 Editors 角色的登录用户访问,这个设定相当于对整个目录的全局设定. 但如果有部分网页需要局部修改这个设定,那么就用自己的配置节来解决,如是上面的一个个 <location...> 配置节,就是对各个需要局部修改访问权限的网页进行设定,但他们应该有一个共同的前提,那就是拒绝所有匿名用户:

<deny users="*" />.如此一来,该目录中所有网页在访问时都会检查是否具有角色权限再呈现出来.

三. 某个权限和另一个权限的角色之间的界限 / 不同的角色用户对同一个页面具有的操作项目不同

之所以把两个论点放在一起讲就是因为,角色之间的界限直接导致用户的操作权限的不同

先来看一个现象 :

protected void Page_Init(object sender, EventArgs e)

{

{

{

{ }

}

那么黄色高亮部分代码就是在页面最终呈现出来之前做了这个属性的赋值操作,很明显,这个属性受两个因素的影响:1. 是否登录-- IsAuthenticated

2. 角色控制 -- Page.User.IsInRole(".....") .

所以,界面上编辑,删除按钮是否出现,而且根据权限的不同是否出现就圆满解决了.这就是为什么由Roger1这个用户迁移到Administrator后,该编辑,删除按钮就出现的原因,那是因为虽然两者都 IsAuthenticated ,但Roger1的角色不是Administrators,也不是Editors,他就当然看不到这些按钮了.

到此,我们分两篇文章讨论了这个网站的验证和授权的问题,其实这些问题遍布很多网页,不过其处理的过程都是一样的.

其实,通过上面三篇对 TheBeerHouse 网站的介绍文章来看,我们基本都是在讨论一些设计问题,那么对于网站的架构和类图分析以及整体后台逻辑流程的分析我们会在后续文章中讨论,可以这么说,下面我们将踏入对这个网站分析的深水区,也是核心的API代码部分了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: