• 权限认证的WEB页面实施


         如果一个系统需要很灵活的权限系统,我们一般会采用RBAC(基于角色的操作控制).我对此的理解,按照UML用例图,可以把分离出资料和操作两个元素,再加上角色.RBAC的东西就齐了.
        关于RBAC的数据库设计以及代码的书写,本文不想论述,我这里只想谈一下,如何在代码的基础上,更好的使用它.
         在使用时,我们要把每个UI控件的事件,如Button.Click事件和一个对资源的操作绑定起来,这样,在我们点击按钮时,通过一定的方法,我们去验证该用户(角色)是否对指定的资源有指定的操作权限,从而做出判断. 而这个一定的方法,我想到两种:
        一. 通过代码直接在事件中写,如
       
    protected void btnDelete_Click()
    {
        
    if(!xx.HaveRight("user","delete"))
        
    {
           
    throw new RbacNoRightException()
        }

        
    else
        
    {
            
    /// code here
        }

    }
    但是这种方式,个人感觉把 "user","delete"这两种东西写死在代码里面了,不是很好.以后要是有什么改动,还得重新编译程序集.
         二. 通过继承重写 Button,注册 Button.Click事件,控制先执行我拉的委托函数A,在这个函数中,来判断权限.
    示例代码如下:
        public class RbacButton : System.Web.UI.WebControls.Button, IRbacControl
        
    {
            
    protected override void OnInit(EventArgs e)
            
    {
                
    this.Click += new EventHandler(RbacButton_Click);
                
    this.Command += new CommandEventHandler(RbacButton_Command);

                
    base.OnInit(e);

            }


            
    void RbacButton_Command(object sender, CommandEventArgs e)
            
    {
                TryRight();
            }


            
    void RbacButton_Click(object sender, EventArgs e)
            
    {
                TryRight();
            }

            
            .
    }
    TryRight就是我们用来判断权限的函数了.但这里有一个问题,我们的控件是共同的控件,不可以知道应该如何判断.但是,在共同控件中,我们可以得到Page的实例,这个应该知道如何判断权限了吧.
    所以,判断权限代码如下面形式:
            共用部分

    解决了上面的问题,稍带也把没有权限的按钮设置成不显示了,有好处吧! 下面就可以看下如何使用了.
        <asp:RbacButton ID="btnSave" 
            RbacResourceAlias
    ="user.card" 
            RbacOperationAlias
    ="modify" 
            runat
    ="server" 
            OnClick
    ="OnSaveCard" 
            Text
    ="修改" />
    这下简单多了.修改也简单.

    QQ:273352165 evlon#126.com 转载请注明出处。
  • 相关阅读:
    一个用css写出来的下拉菜单
    oracle创建新的用户 创建序列 并生成自动自增
    Ubuntu 16.04下安装网络流量分析工具 Wireshark
    Ubuntu16.04安装PostgreSQL并使用pgadmin3管理数据库_图文详解
    http协议无状态中的 "状态" 到底指的是什么?!
    Struts2使用流程
    hibernate创建一对多映射关系
    hibernate中创建一对一映射关系
    利用Hibernate进行数据库的增删改查
    Hibernate的简单流程
  • 原文地址:https://www.cnblogs.com/evlon/p/702531.html
Copyright © 2020-2023  润新知