博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
权限设计的三层境界续
阅读量:6705 次
发布时间:2019-06-25

本文共 1871 字,大约阅读时间需要 6 分钟。

《闲话权限设计三层境界》以权限设计为例聊了一下我对系统设计的理解过程,不过有园友在评论中问到了权限设计一些具体细节,于是就又专门就某些问题说明了一下,并同时感谢大家的关注

 

# 2010-09-27 14:17

Kevin Zou

我刚想了一下,至少需要5个表吧(如果用关系数据库的话)?
1,用户表;
2,角色表;
3,资源表;
4,用户——角色关系表;
5,资源——角色关系表;

 

答复:

权限设计过程中的用户表是不可见的,无足轻重的,只要提供一个用户ID给权限系统即可(那些把年龄,学历什么的纳入权限设计纯属扯淡)

以一个实际例子来说

ERP系统有一个用户系统,web中也有一个用户系统

但是为了避免用户记忆这么多账号,密码,因此我们的web系统同样认可ERP用户,接受ERP的用户登录,给ERP的用户进行授权。

而在权限资料表中,权限可能是这样记录的

UserID,ObjectID

-------------------------------

,查询产量           --ERP用户系统中的sis用户

,查询订单          

850.00,管理用户           --web系统的user id 850用户

 

有这样的权限管控,只要认证过程够聪明,能够认证出这样的用户ID,

那权限管控过程对于是ERP用户还是web用户都是一样的处理,都是以用户ID和资源ID去找对应

至于到底是个什么东东,姓名是什么,Email是多少,可能只与设计权限分配的页面有关系,与权限管控真的无关

 

 

UserID除了可以表示人,它也可以是权限需求所要求的任何主体,如访问者机器的IP

如某系统只允许本厂的人查询,集团中其它公司不能查询

UserID,ObjectID

-------------------------------

172.19,查询产量           --本厂IP段

172.19,查询订单

172.17,查询电话           --兄弟厂IP段

认证过程中,只要识别出了IP,就可调用相同的权限表示逻辑完成权限管控

 

再举一个例子吧

我们的短信平台接收手机短信查询系统数据

如发送

0D01到1362585XXXX(我们的短信平台号码),则系统会自动将D01生产线现在的产量以短信方式回复

同样,也需要权限管控,要不然所有人都可以发送短信去询问产量了

UserID,ObjectID

-----------------------------------

13638384438,产量查询

13558968888,订单查询

这时的权限主体就是手机号码

 

不过因为我们的系统同一个服务,可以用短信查询,也可以在web中查询,为了给User只分配一次权限(即短信平台和web系统共用一套权限)

则可以记录用户ID的手机号码

UserID,Phone

-----------------------------------------

850.00,13638384438

54.00,13558968888

然后在认证过程中将短信号码映射到UserID,剩下的事情也就与其它权限的管控是一样了

 

举了这些例子,只想说明一件事情

权限只是一个工具

《三层境界中》说明了权限的本质是什么

权限表示可能可以抽象,但是权限管控的方法却不一定相同,只是过程却是类似,都是

---------------------------------------

a.识别出人

b.识别出物

c.调用HasPermission(人,物)判断权限

d.实施管控策略

---------------------------------------

 

同样在InsertUser方法中,也是一个管控的过程,如用户只能新增自己部门的账号

public void InsertUser(User user)

{

       string userID = AuthenticateSystem.UserID;

       if(!RightTool.HasPermission(userID,user.Dept))

             throw new PermissionException("没有” + user.Dept + “的权限”);

       … //新增用户的具体代码

}

 

 

同样,资源表的存在与否其实与权限管控也没有很大关系

很多权限管控,并没有资源表

如以URL为权限对象的管控,并不需要专门建一个URL表

以dll中某个类的某个方法,也不需要专门再建一个类方法表

权限认证过程只与识别资源有关,而与有没有资源表完全没有关系

 

所以最终就是

用户表,资源表在权限设计过程中是不必要存在的

转载地址:http://fkblo.baihongyu.com/

你可能感兴趣的文章
java之HashTable
查看>>
Windows Server 2012体验之配置存储池
查看>>
轻松上手移动互联——百度SiteApp建造日志
查看>>
我从跑步中领悟到了什么?
查看>>
你的权限等于你的可见度
查看>>
Gartner:威胁情报的定义
查看>>
redis多实例重启脚本
查看>>
开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试
查看>>
在51系列中data,idata,xdata,pdata的区别
查看>>
【Deeplearning】关注书目
查看>>
【再见RMQ】NYOJ-119-士兵杀敌(三),区间内大小差值
查看>>
loadrunner中Run-time-Setting设置
查看>>
SSL连接建立过程分析(1)
查看>>
port与大全portClose方法
查看>>
美丽的数学家:如果您讨厌数学,这些其实都是人生故事
查看>>
Kettle 中转换(transformation)的执行过程
查看>>
读书笔记-互联网思维阅读10其中一本书《自由》
查看>>
Spark入门实战系列--5.Hive(上)--Hive介绍及部署
查看>>
tomcat设置web根目录
查看>>
CF 444B(DZY Loves FFT-时间复杂度)
查看>>