创建: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接口定义

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构