0

假设我有一个管理敏感数据(例如客户的健康记录)的应用程序。在取得巨大成功后,我吸引了许多客户——其中一些是名人。我现在有很多员工使用这个应用程序。但是,我想通过只允许特权账户经理访问“名人”的记录来保护所说的“名人”的身份。

此应用程序的数据存储在经过多年发展的关系数据库中。“客户”表有一个“名人”列,表示名人的记录;“用户”表有一个“特权”列,表示员工可以访问名人的记录;假设两者都是布尔值。

我可以掠夺整个数据层,为所有查询添加 where 子句;我还必须开始发送一个标志,指示用户是否“特权”。这是一项艰巨的任务,但还有其他选择吗?

我正在寻求一般建议,但我的应用程序是在 Java 平台上编写的。

更新:我熟悉基于角色的访问控制以及用户、组、角色、权限、权限等如何以良好的规范化方式布局,但目前不是一个选项。更有可能的是,我将重构和调整当前系统以使用 Spring Security 等框架。

4

3 回答 3

2

这里的一般情况是不同的用户需要访问不同的客户端。根据我的经验,最好使用角色来实现。可以为不同的用户分配不同的角色。对数据的访问被映射到角色。

在您的情况下,您可能有一个经理角色和一个员工角色。经理可以访问所有记录。员工只能访问不太敏感的记录。这种关联可以通过数据库中的表来管理:例如,role、user_role 和 client_role。user_role 将用户映射到角色,client_role 将定义哪些角色可以访问客户端信息。

我会谨慎添加您描述的“著名”列。危险在于,将来随着新业务规则的出现,您会发现自己需要更多的列,以及数据层中的新代码来实现此逻辑。当你通过角色管理访问时,你就有了一个通用的机制,它往往更具可扩展性,即使它在短期内需要做更多的工作。

于 2013-09-27T18:20:11.857 回答
0

我认为您走在正确的道路上:安全性是一个横切关注点,是一个需要以某种方式集中的“方面”。

要具体回答您的问题,您应该选择一个framework + taglibrary,您提到的那个,Spring Security 是一个完美的选择,从长远来看可以付出努力。您可能还想使用面向方面的编程(AOP) 来集中某些方面,因为 Spring 包含 AspectJ。

但是你仍然需要引入角色和权限的概念.. 看到这篇好文章。

于 2013-09-27T20:41:57.537 回答
0

您的一般问题的一般答案:查看 RBAC(基于角色的访问控制)。在 Java 中,您可以有一些分配了角色的用户类。每个角色都有一组特定权限(可以是枚举)。那么在每个受保护的操作之前,您必须检查当前用户是否具有相关权限。

于 2013-09-27T18:28:26.257 回答