【发布时间】:2009-08-29 11:36:01
【问题描述】:
这是一个没有实际意义的问题,因为我不再参与这个项目,但它继续困扰着我。我想知道是否有人对未来的参考和一般的良好编程实践有更好的想法。
教科书式的安全方法是“基于角色的安全”。每个屏幕、报告或其他任务都附加到一个或多个角色;每个用户都被分配一个或多个角色;然后每个用户都可以使用与他的角色相匹配的屏幕等,仅此而已。对吧?
几年前,我带领一个团队开发了一个管理军事技术手册的系统。每本手册都有一个“技术内容管理员”,负责编写或编辑它; “库存经理”,负责跟踪副本并将其运出;还有一个“行政经理”,负责预算,因此他决定了这本书多久修改一次,印多少本等等。当然,每本书都有一群人会订购副本并阅读它。 (因为这是军队,你必须获得授权才能拿到书、安全许可等等。)我们通常不担心实际的读者,而是担心每个基地管理图书馆的人,但这在这里并不重要。
所以...这些都是显而易见的“角色”,但角色与特定的书相关联。一个人可能是 A 书的技术内容经理,B 书的行政经理,以及其他 50 本书的读者。所以我们不能真的说用户有“角色”。每个用户对每本书都有不同的角色。
除此之外,还有更多常规的系统级权限:我们有几个系统管理员被授权更新系统中的任何内容,服务台人员可以看到几乎所有数据但不能更新,等等。
我最终创建了一个这样的数据库。 (为了避免进入我们的一些奇怪的术语,我将在这里更改一些字段和表名,想法是一样的。)
人员(person_id、姓名等)
Technical_Manual(manual_id、title、admin_manager_person_id、stock_manager_person_id、content_manager_person_id 等)
Authorized_Reader(manual_id、person_id 等)
用户(user_id、admin_role 等)
我对这个方案并不满意,因为这意味着安全性被分成三个表:technical_manual 表、authorized_reader 表和 user 表。但是......有没有一种更清洁的方式我们可以做到这一点?有更好的想法吗?
【问题讨论】: