实际上,每个Web应用程序都应该有多个用户,每个用户都有一些数据--帖子、文档、消息等等。最明显的事情是保护这些实体不被那些不是这些资源的合法所有者的用户所获得。
不幸的是,这不是最容易做的事。我不是说这很难,只是不像简单地返回资源那样直观。当你是你的/record/{recordId}
端点,记录ID的数据库查询是您立即要做的事情。只有这样,才需要检查该记录是否属于当前通过身份验证的用户。
框架在这里不会帮助您,因为这种访问控制和所有权逻辑是特定于域的。没有明显的通用方法来定义所有权。这取决于实体模型和实体之间的关系。在某些情况下,它可能非常复杂,涉及到连接表中的查找(对于许多到多个关系而言)。
但是你应该让它自动化,原因有两个。首先,手动对每个端点/控制器方法执行这些检查非常繁琐,使代码变得很难看。其次,更容易忘记添加这些检查,特别是在有新开发人员的情况下。
您可以在几个地方进行这些检查,直到DAO,但是通常您应该尽早失败,因此这些检查应该在控制器(端点处理程序)级别上。在Java和Spring的情况下,您可以使用注释和HandlerInterceptor来实现自动化。对于任何其他语言或框架,都有类似的方法可用--一些可插入的方法来描述要检查的所有权关系。
下面是每个控制器方法的示例注释:
1 2 3 4 |
|
然后定义拦截器(当然,应该配置为执行该拦截器)。
https://www.douban.com/note/811411387/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25< |