我需要实现一个可供不同用户使用的Web应用程序。每个用户在各种表上都有不同的特权,例如
Student
我将在UI级别上进行一些操作以限制某些访问,例如,为无权修改条目的用户隐藏“编辑”按钮。但是,我认为我应该在较低级别上(也许在数据库级别上)来确保数据安全。
我正在为我的应用程序使用Hibernate,JBoss,DB2和Struts。我认为我应该使用某种JBoss LoginModule,它可以通过具有用户/密码/角色的数据库对用户进行身份验证(但我可能是错的(?))。我进行了一些研究,并提出了以下选择,但似乎没有一个适合我的情况。我认为这是多用户Web应用程序中非常常见的数据访问问题。有人可以指出我正确的方向吗? 先感谢您!
在hibernate.cfg.xmlJACC事件侦听器中使用’grant’标签。这可以在所有hibernate实体上设置“插入”,“更新”,“读取”权限。但是,如果我需要更好的控制该怎么办?我需要在某些字段而不是整个对象上设置权限。http://www.hibernate.org/hib_docs/v3/reference/zh-CN/html/objectstate-decl-security.html
hibernate.cfg.xml
限制每个ejb的getter / setter方法的权限。如果我正确理解这一点,则需要为每个用户配置文件手动配置每个bean,这对我来说似乎不现实。 EJB方法权限
编写DAO的代码以检查用户权限。滚动我自己的实用程序函数,该函数在每次调用特定的DAO方法时都会检查巨型权限表,以确定已登录的用户是否可以执行该操作。
在Hibernate中使用“拦截器”和“事件”。为每个类定义特定的“ onLoad”,“ onSaveorUpdate”等事件和拦截器。在这种情况下,我可以为各个字段指定权限级别吗?http://www.hibernate.org/hib_docs/v3/reference/zh-CN/html/objectstate-events.html
我可能在错误的树上吠叫。以上所有这些似乎都是劳动密集型的,不是很聪明。以上选项均未提供给我编程方式来在运行时更改用户权限,当管理员级别的用户希望在此应用中为其他用户提供更多控制权时,这将非常有用。
在这里进行数据访问控制的一种好方法是什么?
将安全密钥添加到实体,创建权限表,并将用户与具有实体类型的许可以及具有角色的安全密钥链接。这样,您可以说出类似的话:Admin_role可以访问Student(实体类型)并进行读取(权限中的操作)和Write(操作),而Student_role可以为其自身和Read_permission访问Student_key。您可以通过将地址重构为实体并向其中添加安全密钥来解决该地址。
您的四号可能有一个封闭世界的假设,并说除非您可以担任用户的当前角色,否则将属性名与字典(实体+属性)哈希中的标记链接到flag,即封闭世界的假设默认情况下不允许读取。那么,您当然不会获得任何写权限等。
您可以在数据库中定义视图,并使用数据库身份验证系统为其分配权限。如果您能够自己编写代码,这可能是最干净的方法,这取决于我们是哪个角色来选择要调用的视图。(我以前的RDBMS老师会喜欢我这么说;)这也与Hibernate有所不同,并将您的东西更多地耦合到数据库中。我想这取决于代码的可移动性/可移植性。
围绕通用dao(IRepository)使用一个方面,该方面根据您的权限重写查询。当然,这意味着您在代码中具有基于权限的安全性。
实际上,只有在您首先移植代码权限时,才能在gui中隐藏编辑按钮,例如在我的观点1上。我建议您看一下Ayendes博客以获取对此的开源实现,他是一个非常熟练的人。编码器。