ORM:通过可达性进行授权
我们正在构建一个使用数据库的Web应用程序。我们还使用对象关系映射器访问数据库。webapplication中授权的一个方面是用户可以访问URL引用的对象。URL包含数据库中特定记录的唯一id(例如主键)。考虑下面的例子。ORM:通过可达性进行授权,orm,authorization,Orm,Authorization,我们正在构建一个使用数据库的Web应用程序。我们还使用对象关系映射器访问数据库。webapplication中授权的一个方面是用户可以访问URL引用的对象。URL包含数据库中特定记录的唯一id(例如主键)。考虑下面的例子。 一个用户可能属于多个组,一个组可能有多个用户(多对多) 调查属于一个组(多对一) 调查可能有多个问题。(多对一) 假设我们有以下URL:。这意味着我们要用PK 10编辑问题。现在,我们要验证登录用户是否可以使用PK 10访问问题。这可以通过检索这个问题、调查、小组和所有用
- 一个用户可能属于多个组,一个组可能有多个用户(多对多)
- 调查属于一个组(多对一)
- 调查可能有多个问题。(多对一)
- 执行查询以获取每个“父项”,使用许多查询)
- 联接所有必要的表,以查看在一个查询中是否存在记录(可访问用户与登录用户匹配)
或者。。。我只是看错了这种授权吗?ORM是否有更好和不同的方法?我过去在RubyonRails(使用活动记录ORM)中使用嵌套资源处理过这一问题。而不是,URI将是 在控制器中加载问题和调查。您可以通过将调查与经过身份验证的用户的组成员身份进行比较来检查授权。实现这一点的一种方法是将此逻辑嵌入到用户类中。例如,在控制器中,您有
问题
和调查
(ORM很好地理解了两者之间的关系,即问题.调查
)。然后,您可以以user.hasAccess?(问题)
的身份检查访问权限,这是一种相对容易编写的方法。伪代码:
class User < ActiveRecord::Base
def hasAccess?(question)
return question.group.users.include?(self)
class用户
是的,这将导致在幕后进行多个查询,但ORM可以完成这项工作。我这样做是因为您只剩下可靠的模式和易于阅读的代码。在实际出现性能问题之前不要进行优化