昨天去杭州的信诺科技
面试,被问到一个关于用户权限管理的问题,当时做了一个些简单的回答以后,自己又好好的想了想自己曾使用过的一种网站用户权限管理方法,就是本人原创的使用URL参数+Controls层实现网站用户权限的方式,我本人感觉很不错,所以向大家介绍一下,也可以讨论一下,下面我先列举一些常用的用户权限管理实现的方法,然后再介绍我自己原创的使用URL参数+Controls层实现网站用户权限的方法。
1、使用ASP.Net自带的权限管理 在web.config文件中修改以下的内容: <authentication mode="Forms"> 2.在login.aspx中如果用户名和密码正确则给予验证: FormsAuthentication.SetAuthCookie(TextBox_name.Text,false); //在本页 3.退出验证: FormsAuthentication.SignOut(); 4.获得当前用户的名字: User.Identity.Name; 评点:该方法非常简单、便捷和易于管理,你只要将需要验证页面放在该文件夹就可以了,但是该方法只能在做简单的用户管理时使用,因为它只有匿名用户和非匿名用户的划分,不能对多级用户进行划分。
该表需要记录多个权限组,比如超级管理员、管理员、用户等,每个权限组设置不同的权限,然后再将某用户隶属于该权限组,甚至也可以在用户表中对某用户的权限进行单独设置,用户权限从用户组权限继承以外,然后还需包括自己的私有权限。 评点:该方法的可扩展性很强,基本上可以完成所有权限管理需要的操作,但是它也有不好的地方,那就是在用户进行某项操作之前,你都需要在程序中加入权限判断的操作,才能返回“允许”或“拒绝”操作的指令,这样显然不易于管理,而且权限的层次结构在程序中不清晰,维护也不方便。 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层就无须在进行权限的判断。
|
使用URL参数+Controls层实现网站用户权限管理
最新推荐文章于 2022-02-23 14:56:11 发布
Feedback
不是吧,asp.net自带的权限管理支持用户角色(Roles)的,怎么会“只有匿名用户和非匿名用户的划分,不能对多级用户进行划分”呢