我正在开发一个应用程序,该应用程序由在不同机器上运行的不同语言(Java和C#之间)组成的模块运行(目前,在局域网内部;所以它不是很大,但是,它是分布式的) 。我们正在寻求一种合理的方法来实现功能的基于角色的权限(配置谁有权调用功能的哪一部分)。
目前,这是通过将用户名映射到允许使用的对话元素的GUI ID的自定义数据库表来解决的(这不是我的想法,以防你想知道......)并且我们的模块之一是'' admin'设置这些值的功能。我有这种感觉,但我不确定,这种直接写入此表并不是一种好方法,特别是对于并发写入('admin'模块)和读取(尽管数据库事务应该提供并发处理......但是在这种情况下这是否足够?)。
所以我的想法是一个中心服务(最好用C#编写,但Java也可以,如果它的框架提供更好的支持),所有模块都可以访问它们,设置和读取权限。然后,此服务可以防止并发问题。当然,在它的后面,它仍然会使用一个数据库来存储权限。
您如何看待这种方法,服务不会成为瓶颈吗?但它对我来说'感觉'是正确的。对我来说感觉不对的是从头开始做这个就像重新发明轮子一样。该服务可能类似于(ASP).NET提供的身份验证和授权子框架吗?甚至是Active Directory?但它的重点似乎更粗糙(文件,目录,打印机,而不是应用程序内的功能......)。 你能告诉我你对这个话题的经历吗? 非常感谢提前!
以下是我在搜索过程中发现的一些指示:
http://en.wikipedia.org/wiki/Role-based_access_control
Storage of Role-based Permissions using ADFS and WIF
Designing a permissions based security model
Best Role-Based Access Control (RBAC) database model
答案 0 :(得分:1)
如果您正在寻找即用型解决方案,我建议您使用LDAP设施。 Active Directory不仅是支持此协议的一种解决方案,您甚至可以使用开源协议。但考虑到常见和一般的解决方案,您可以放松性能。我不记得我使用的支持LDAP的开源存储,但它似乎很慢。因此,最好的方法是将自己的可扩展和高可用存储实现为服务。