【发布时间】:2016-06-06 05:51:04
【问题描述】:
在我的应用程序中,每个用户都可以拥有多个授权角色。根据他的角色,应该允许用户查看某些数据摘录。我想通过 REST-API 从我的关系数据库中提供这些数据。
例如:
table "Role"
UserName | Role
---------------------------
Anne | ViewFreshFruits
Mike | ViewFreshFruits
Mike | ViewTinySoft
table "Company"
Name | Address | Role
--------------------------------------------
FreshFruits | 123 America | ViewFreshFruits
TinySoft | 543 Britain | ViewTinySoft
table "Contract"
ID | CompanyName | Dollar
---------------------------
147 | FreshFruits | 15549
148 | FreshFruits | 16321
149 | TinySoft | 2311
要实现 REST-Resource http://api:8080/Application/Contracts/getAll,数据(未经权限检查)可以简单地是:
SELECT Contract.* FROM Contract
但安妮只能看到 147 和 148。迈克可以看到 147、148、149。而且托米不能得到任何结果。
我开始像这样实现权限检查:
SELECT Contract.* FROM Contract
INNER JOIN Company ON Contract.CompanyName = Company.Name
INNER JOIN Role ON Role.Role = Company.Role
WHERE User = @CurrentlyAuthenticatedUser
随着我的数据库中表的数量增加,这种 SQL 变得越来越复杂。我正在寻找一种更简单的方法:不太复杂且更易于维护。性能不是我最关心的问题。
如何尽可能简单地根据用户过滤某些数据行?
我使用的是 Microsoft SQL Server 2012、Java Tomcat 8 和连接池。
【问题讨论】:
标签: java sql rest authorization