使用URL参数+Controls层实现网站用户权限管理
来源:互联网 发布:甄嬛传演技知乎 编辑:程序博客网 时间:2024/05/12 00:38
1、使用ASP.Net自带的权限管理
在web.config文件中修改以下的内容:
<authentication mode="Forms">
<forms name=".ASPXUSERDEMO" loginUrl="login.aspx" protection="All" timeout="60" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
2.在login.aspx中如果用户名和密码正确则给予验证:
FormsAuthentication.SetAuthCookie(TextBox_name.Text,false); //在本页
FormsAuthentication.RedirectFromLoginPage(TextBox1.Text,false); //转到操作页
3.退出验证:
FormsAuthentication.SignOut();
4.获得当前用户的名字:
User.Identity.Name;
评点:该方法非常简单、便捷和易于管理,你只要将需要验证页面放在该文件夹就可以了,但是该方法只能在做简单的用户管理时使用,因为它只有匿名用户和非匿名用户的划分,不能对多级用户进行划分。
2、使用XML配置网站用户权限
该方法是昨天那位面试官提的一种方法,就是在每个目录下面建立一个XML权限配置文件,当用户需要访问这个目录的文件时,通过读取该XML文件信息来判断该用户是否有权限访问。
评点:本人认为该方法显然不易于维护和管理,在文件夹比较多且权限组较多时,很容易造成混乱,而且在用户访问该文件下任何一个文件时都需要读取XML文件来判断,那么就需要在每个文件中都加入权限判断操作的代码。
3、使用数据库字段标记方式
这也许是我们最常用到的方式,许多的大型系统都采用的这样的做法,一般就建立一张权限表,比如:
权限组名称
权限
超级管理员1,1,1,1,1,1管理员1,0,0,1,1,1用户0,0,0,0,1,1该表需要记录多个权限组,比如超级管理员、管理员、用户等,每个权限组设置不同的权限,然后再将某用户隶属于该权限组,甚至也可以在用户表中对某用户的权限进行单独设置,用户权限从用户组权限继承以外,然后还需包括自己的私有权限。
评点:该方法的可扩展性很强,基本上可以完成所有权限管理需要的操作,但是它也有不好的地方,那就是在用户进行某项操作之前,你都需要在程序中加入权限判断的操作,才能返回“允许”或“拒绝”操作的指令,这样显然不易于管理,而且权限的层次结构在程序中不清晰,维护也不方便。
4、使用URL参数+Controls层实现网站用户权限
本方法其实是第3种方法的改进,将ASP.Net中Controls层结构与程序中的用户权限层结构相结合,利用URL 参数标记字段,当然也可以使用ViewState来标记,具体实现方法如下:
网站中只有一个.aspx页,在页中加入一个PlaceHolder控件,然后在Page_Load中加入:
if (Action == null)
{
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Default.ascx"));
}
else if (Action == "Manage")
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Manage.ascx"));
}
else if (Action == "Help")
{
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Help.ascx"));
}
... ...
用URL参数标记当前的用户操作位置,然后显示相应的内容,比如Manage.ascx中的内容只能管理员以上的用户才能访问,则在Manage.ascx的Page_Load中加一个权限判断当前用户是否拥有访问权限,在M anage.ascx中有“用户管理”、“地区管理”、“文章管理”等多个栏目,而只有超级管理员能进行“地区管理”。URL标记如下:
用户管理:Default.Aspx?Action=Manage&Sort=User
文章管理:Default.Aspx?Action=Manage&Sort=Article
地区管理:Default.Aspx?Action=Manage&Sort=Area
需要在Manage.ascx中添加一个PlaceHolder控件,判断Sort参数显示相应的Control内容,如下:
if (Sort=="User")
{
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/User.ascx"));
}
else if (Sort== "Article")
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Article.ascx"));
}
else if (Sort== "Area")
{
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Area.ascx"));
}
你只需要在“地区管理”的文件中加入一个权限判断当前用户是否为超级管理员。在“用户管理”以及“文章管理”的文件中就不需要判断用户权限。
评点:在Default层中允许所有用户访问,同时包括Help.ascx等,在Manage层只允许管理员以上的用户访问,而在Area层则只允许超级管理员访问,使用该方法的优点就是无需在每一个页面添加权限判断的操作,而是在一个Controls层添加一个权限判断的操作,而且权限与程序的结构层次清晰,易于维护与管理,它不基于应用程序的目录级,而是基于ASP.net的Controls层方式,比如需要进入Area层,就必须先进入Manage层,而User层就无须在进行权限的判断。
如果你有更好的方法,欢迎和我讨论,我的QQ:527474 Email:ruixing123@hotmail.com
- 使用URL参数+Controls层实现网站用户权限管理
- 网站用户权限管理
- msyql用户权限管理使用
- ASP.Net实现用户权限管理
- 实现业务系统用户权限管理
- zTree树实现用户权限管理
- 使用URL Rewrite实现网站伪静态
- 使用URL Rewrite 实现网站伪静态
- 使用URL Rewrite 实现网站伪静态
- 使用URL Rewrite实现网站伪静态
- 使用URL Rewrite实现网站伪静态
- 使用URL Rewrite实现网站伪静态
- 使用URL Rewrite实现网站伪静态
- 使用Url Rewrite实现网站伪静态
- 使用URL Rewrite 实现网站伪静态
- newxy标签实现部门管理、用户权限管理
- Yii: URL管理规则中命名参数使用注意点
- 实现业务系统中的用户权限管理
- datagurad的几个进程
- 小明系列故事——师兄帮帮忙
- CI8.3--输出全部子集
- MAC (Mountain Lion)+Eclipse+python+Django+PyDve+MySQL 安装错误解决办法
- IOS百度地图开发系列-百度地图不能正常显示
- 使用URL参数+Controls层实现网站用户权限管理
- android 监听电源键
- 经由过程代码设置radiobutton不合方位图标的两种办法
- 吉哥系列故事——恨7不成妻
- jquery表单验证,确定必须字段不留空,为数字
- asp.net gridview
- 新买的3TB新硬盘为何缩水了??
- linux 的shell 编写常用技巧
- 湫湫系列故事——减肥记I
Feedback
不是吧,asp.net自带的权限管理支持用户角色(Roles)的,怎么会“只有匿名用户和非匿名用户的划分,不能对多级用户进行划分”呢