首页 新闻 会员 周边 捐助

关于站点用户的授权问题

0
[已解决问题] 解决于 2008-09-22 15:05

就用一个简单的网页来说吧。一个页面里有若干个控件(按钮),针对不同的操作,而我要做一个授权机制来控制按钮的显示或是否可用,对于不同类型的用户,给予不同的权限。我是想通过获取页面中所有控件的名称来进行控制,但要如何获取所有控件(控件名)呢?

问题补充: 各位的解决方案都很好,我跟这些都是类似的。但主要是有一个问题,就是:我做了授权管理后,进入页面时就得有一个动作,便是验证用户权限,哪些控件可见,哪些控件不可见。而授权管理类只是判断传入的控件判断,该用户是否可用,那么,它的上一个步骤,即必须先将页面中的控件作为一个集合然后依次调用授权管理类,再对控件进行属性修改操作。这个集合应该如何得到呢?
少之的主页 少之 | 菜鸟二级 | 园豆:205
提问于:2008-09-17 22:55
< >
分享
最佳答案
0

      不要使用 FindControl 的解决思路,递归寻找的效率、性能将是大问题,极其不实用。

      以下引用于我的回答(http://space.cnblogs.com/question/2780/):


  你说的应该是指如果对用户进行权限管理。就我的经历来看,分两类:一类精确到页,一类精确到控件(页面区域?)。

  对于前者,我的做法是,创建 ResourcesManager 类,其负责或返回当前用户针对某页是否可访问。数据库创建 Resources 表,记录用户(建议使用用户组或角色)和已授权页的匹配关系。

  后者,创建 ControlsManager 类,而数据库端创建 Controls 表,记录用户(建议使用用户组或角色)和已授权控件的匹配关系。而在页面加载时,各控件(也可以是页的某个区域)根据授权选择显示或不显示。

  ...


      当前楼主特指控件授权的情形。我的做法是,给控件(Control)的某个属性赋予特殊涵义,比如 ID,并订阅控件 Control_Load 事件如下情形:

 

ControlsManager
protected void Control_Load(object sender, EventArgs e) {
ControlsManager.CheckAuth(sender
as Control);
}

public class ControlsManager {
public static void CheckAuth(Control c) {
string controlName = c.ID.Substring(c.ID.IndexOf('_') + 1);
//从数据库表 Controls 及 UserControls 中获取当前用户与 controlName 的授权匹配情形
……
c.Visible = true;//通过验证
c.Visible = false;//验证失败
}
}

 

    注意数据库表 Controls 含字段 ControlId, ControlName,表 UserControls 含 UserId, ControlId等

陛下 | 老鸟四级 |园豆:3938 | 2008-09-18 09:59
其他回答(3)
0

单纯的获取所有控件,可以使用FindControl()方法,不过你这个规则很难定义吧?

我以前做过一个类似的,是给所有需要进行权限控制的控件一个GUID,权限分配时根据这个GUID来分配,操作起来相当麻烦,需要把权限下放到这些控件,管理后台设置是一件相当头疼的事情

你这个是怎么做的?

丁学 | 园豆:18730 (专家六级) | 2008-09-18 07:20
0

有个LoginView控件可以实现这样的功能啊,可以根据不同的角色显示不同的模板

Gray Zhang | 园豆:17610 (专家六级) | 2008-09-18 09:08
0

我这种操作归纳到权限管理中的资源管理

添加人员权限[其实就是一个添加人员的页面],而对应有好多资源[如添加,删除,修改],其资源的ID,和页面上的ID是一对一的对应关系,如添加页面中的资源添加ID是add,那页面中添加按钮的ID就是btn_add,这样,当分配了一个角色的权限中,其添加人员权限中,有资源:添加的话,那就显示btn_add

以上是大概的思路,设计时还要具体对待

zjy | 园豆:3194 (老鸟四级) | 2008-09-18 09:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册