休息应用程序中的用户上下文

User context in rest application

我有一个 angularjs 应用程序,后面有 rest java 后端

我想将每个用户限制在他的上下文中,比如用户只能访问关系数据库中属于他的数据

(like, user can only have access to his calculations data, only to his files, etc).

最好的方法是什么?

我可以在每个数据库查询中检查用户是否有权访问该数据,但看起来有很多连接结构,也许有另一种解决该问题的好方法?

谢谢你的帮助

你可以在查询的时候查,也可以等出结果再查。我倾向于在得到结果后进行检查,以防我需要建模比我想在数据库中建模的更复杂的安全约束。例如,如果您有安全组或管理员用户的概念,那么拥有一个抽象层将对您大有裨益。

既然你提到后端是REST后端,你可以考虑让每个用户的资源都是独一无二的。这可以通过 URL 上的用户数据分区来完成。这是一个常见的方法:

http://api.example.com/users/1234/files
http://api.example.com/users/1234/files/6748
http://api.example.com/users/1234/stuff/32
http://api.example.com/users/5347/files
http://api.example.com/users/5347/stuff/218

当每个资源都是唯一的时,这意味着您可以缓存它们,使用 HTTP 缓存 headers。也许您可以在客户端应用程序和 REST API 之间设置一个 HTTP 反向代理,以便缓存由 off-the-shelf 软件处理。

这样做的好处是,即使数据库查询由于连接而变慢,您也不会经常访问数据库,因为大多数时候客户端会从反向获得所需的答案代理(或它自己的缓存)。

这是否是一个好主意取决于读写之间的比率,up-to-date 数据必须如何,等等。但是,在适当的情况下,这种架构可以非常有效。