• 权限设计“终极”解决方案


    创建:5/16/2005
    最后更新:5/16/2005
    编写:谈少民 SteveTan
    Email:tansm@21cn.com

    摘要:本文从另外一种角度来设计权限解决方案,详细解释了如何使用范围、授权和证书的概念来处理复杂的权限问题。

    目录:


    说在前面的
    在讲这个所谓的“终极”解决方案之前,我想先说明几点:
    1、首先所谓的“终极”是我认为的“终极”。我对当今世界的权限处理的“国际水平”并不了解太多,只知道一些典型的“Who,How,What"模型,什么角色。如果你现在就异常失望了,那真是对不起,浪费了您宝贵的时间,请现在关闭窗口;
    2、看这篇文章,我假定你已经有一些权限设计的实际开发经验和知识。

    权限设计案例
    在以前的几年的开发中,总是遇到这种复杂的权限设计需求,我将从简单到复杂的罗列一下:
    总经理可以处理凭证的所有功能;
    财务只能处理未审核的单据的所有功能;
    分公司的经理可以审核他所负责的区域的所有单据;
    你首先现在需要思考的是:你以前设计的系统都是与此相似的要求吗?哦,如果比这里更多,没有关系,继续看。
    当然,为了说明问题,我还是用一个简单的例子:
    一家健身俱乐部,有普通运动室和豪华运动室,客户分VIP客户和普通客户,总经理规定只有VIP客户才能使用豪华运动室(谁说有钱没有用 :(  ),OK,现在一个客户买了一张VIP卡,然后这次客户来消费,走到豪华运动室门口,服务生检查了他的卡,然后客户就可以进去消费了,好简单的一个问题。

    我的解决方案
    还是单刀直入讲我的解决方案,用“范围、授权和证书”的概念怎么解释上面的案例呢?
    1、首先我认为这里有个叫“场地”的范围,即一种限制方式。
     
    2、俩种客户,在这里理解为俱乐部承认的俩种证书。
    3、总经理的规定,是一个“授权”行为,在计算机中相当于点击“权限设置”功能,如下图:
     
    每个授权包含俩个部分:授权的范围,和此授权必要的证书。在上面的例子中,授权1对普通运动室做了“允许”授权,条件是你有“普通会员证书”,第二个是一样的道理。
    4、客户购买VIP卡,是一个具体用户的证书颁发过程,他拥有了这个证书;
    5、客户走到豪华运动室门口,想进去玩玩,相当于在软件中,他要去执行某个功能。这里的服务生相当于我们的程序,他做了一个“断言”,他是怎么做的呢?
    循环检索所有已有的授权;
    当他拿到一个授权时,判断这个客户是否能够提供授权需要的所有证书;
    如果能够全部提供,代表通过,否则下一个,直到检索完所有的授权都没有,那就说:先生,没钱你跑这儿干嘛? :-)
    明白了吗?不要去想权限的事情,把这件事情的处理方法搞懂了再看下面的。

    实际编程的问题一一攻克
    也许你要大叫:老兄,说权限,你扯哪了。 OK,言归正传,先说最简单的那个问题
    总经理可以处理凭证的所有功能;
    我分解为:
    范围:包括1个“模块类型”的范围,范围在程序中使用一个IRegion接口定义

     1using System;
     2
     3namespace Taysoft.Common.Security
     4{
     5    /// <summary>
     6    /// Define region state
     7    /// </summary>

     8    public enum RegionState
     9    {
    10        /// <summary>
    11        /// 
    12        /// </summary>

    13        Normal = 0,
    14        Max    = 1,
    15        Min    = 2
    16    }

    17
    18 /// <summary>
    19 /// This interface describes the privilledge scope of security.
    20 /// </summary>

    21 public interface IRegion
    22 {
    23            /// <summary>
    24            /// Return region state
    25            /// </summary>

    26            RegionState State{get;}
    27 }

    28}

    29
    30
  • 相关阅读:
    HTML基本知识
    几个常用的正则表达式
    C#操作文件
    传说中的WCF(3):多个协定
    传说中的WCF(2):服务协定的那些事儿
    查询表、存储过程、触发器的创建时间和最后修改时间
    SQL四舍五入及两种舍入
    自制 JS.format带分页索引
    js:字符串(string)转json
    $.each 和$(selector).each()的区别
  • 原文地址:https://www.cnblogs.com/tansm/p/158058.html
Copyright © 2020-2023  润新知