我看到的大多数示例都实现了REST网址模式,例如http://www.app.com/books/1
,可以访问ID为1或http://www.app.com/books
的图书来访问所有图书。
这很好,但通常我会研究支持多家公司的应用程序。例如,公司ABC有2个用户,公司DEF有2个用户。公司 ABC 的用户会创建一个ID为的图书。现在,来自公司 DEF :
的用户进行RESTful调用 http://www.app.com/books/100
需要存在Access异常,或
http://www.app.com/books
只列出属于DEF的所有书籍(不是ID为100的新书)。对于许多实体,例如Book,公司ID是表的一部分,但对于可能不是这种情况的其他实体。例如,如果书中的一个章节有REST操作,http://www.app.com/chapter/333
章节表将具有对该书的外键引用,而不是公司。
管理对此资源的访问权限的最佳做法是什么?如果DEF的某个人试图从ABC访问一个章节,我将不得不构建一个查询,将该章加入书中以验证公司ID是否有效。
我正在使用Grails 3.x,其中大部分逻辑都是抽象的,并且认为“自动地”发生。因此,将自动返回为特定书籍ID输入的URL,并且列出all的请求将返回数据库中的每本书。似乎要继续,我必须覆盖大部分这种自动功能并实现我自己的安全性,可能在服务层,其中公司ID将是每个操作的必需参数。这听起来合理吗?
这种事情是否有既定的最佳实践?