好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

#用户权限控制架构,可以控制到类

#用户权限控制架构,可以控制到类

我曾经在想,怎么样控制权限比较好呢。曾经尝试过控制到页面,很方便,但不细致;也曾想过控制到按钮,很麻烦,也不灵活。最终我决定,还是控制到方法吧(实际是控制到类),所以现在这套权限管理方案便产生了。只需要继承与一个类,并给它设置一个attribute,就那么简单。这就是Lm.Common.Auth命名空间提供的权限控制方案。

以下是对这种权限控制方案的简单描述,以及整理出来的最简代码。

完整代码请访问我的开源项目, http://lmcommon.codeplex.com/

OperationBase类,是权限控制的核心。如果一个类ClassA继承与OperationBase,那么ClassA提供的所有方法,都将受到OperationBase的权限控制。

所谓权限控制的核心,就是判断一个用户标识和一个权限标识之间的对应关系。

OperationBase类对其子类的以下两个要求,使得OperationBase类收集到这个两个标识。

1、OperationBase类要求其子类必须向其构造函数提供一个用户标识;

2、OperationBase类要求其子类必须有一个OperationAttribute特性,并在OperationAttribute中提供权限标识。

权限控制执行过程(子类以CreateOrder【创建订单类】为例):

1、向CreateOrder类的构造函数传递一个用户标识,以便构造一个CreateOrder类的实例;

2、由于CreateOrder继承与OperationBase,OperationBase的构造函数必然会被调用;

3、在OperationBase的构造函数中,检查CreateOrder是否具有OperationAttribute特性,如果,提取出其中的权限标识,如果没有,抛出异常,终止构造过程;

4、收集到用户标识和权限标识后,去数据库中比对,如果此用户,没有权限,抛出异常,终止构造过程;

5、CreateOrder的实例无法构造,其提供的方法,自然无法执行,以达到权限控制的目的。

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Lm.Common.Auth
{
      ///   <summary> 
     ///   权限控制的核心类
      ///   </summary> 
     public   abstract   class   OperationBase
    {
          ///   <summary>         
         ///   </summary> 
         ///   <param name="user">  用户编号  </param> 
         protected  OperationBase( string   user)
        {
              //  获取子类的权限编号 
             var  attrList =  this .GetType().GetCustomAttributes( typeof (OperationAttribute),  false  );
              if  (attrList.Length !=  1  )
            {   throw   new  Exception( "  当前类  "  +  this .GetType().FullName +  "  没有OperationAttribute特性  "  ); }
              var  attr =  (OperationAttribute)attrList.Single();
              var  operationCode =  attr.OperationCode;
              //  拿到了权限编号,和参数中的用户编号,
              //  就可以去数据库中比较,看看该用户是不是具有这个权限,
              //  如果没有权限,抛出异常,中断权限实际操作类的构造 
         }
    }
      ///   <summary> 
     ///   这个类用来存储权限编号
      ///   </summary> 
     public   sealed   class   OperationAttribute : Attribute
    {
          public   string  OperationCode {  get ;  set  ; }

          private   OperationAttribute()
        { }
          public  OperationAttribute( string   operationCode)
        {
              this .OperationCode =  operationCode;
        }
    }
      ///   <summary> 
     ///   这个类提供创建订单的功能,这个类的权限编号是“CreateOrder”
      ///   </summary> 
    [Operation( "  CreateOrder  "  )]
      public   class   CreateOrder : OperationBase
    {
          public  CreateOrder( string   user)
            :   base  (user)
        { }
          public   void   Work1()
        {
              //  完成某些功能 
         }
          public   void   Work2()
        {
              //  完成某些功能 
         }
    }
} 

============================================ 
我的开源项目,都是平时的积累,对提高开发效率很有帮助。 
http://lmcommon.codeplex.com/

 

标签:  c#用户权限控制架构 ,  权限控制架构 ,  权限控制 ,  架构

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于#用户权限控制架构,可以控制到类的详细内容...

  阅读:35次