如何在Rails中实现对上传资产的访问控制?

How to implement access-control for uploaded assets in Rails?

我有一个包含管理员和普通用户的应用(两个不同的模型)。两者都可以上传文件。目前,文件模型没有 uploaded_by 属性或与 Admin/User 模型有任何关联。一旦某个文件被某人上传,它就会被添加到整个列表中,每个人 sees/can 都会删除所有内容。我需要这个:

我想请教如何实现这个。

我可以为文件添加一个多态 belongs_to,然后执行类似 - File.where(owner: current_user) + File.where(owner_type: 'admin').

的查询

我可以使用自己的系统或使用 punidtcancancan 之类的东西。

您已经回答了您的问题。是的,运行 punidtcancancan 并添加多态关系是很好的方法。我只能补充一点,您的查询要简单得多:

File.where(owner: current_user)

无需检查 owner_type

更复杂的模型

另一方面,我对您模型的简单性感到惊讶。如果您需要在单个文件上定义多个规则怎么办。例如,user1 是文档的所有者,user2 和 user3 是编辑者,user4 只是查看者。

在这种更复杂的情况下,您可能需要一个名为 UserFileRole 的单独模型,其中包含 user(多态)、filerole 字段。

我个人会选择这种模式,因为就编辑文档的权利而言,只是"admin"仍然没有任何意义。他们是两个不同的角色。所以应该单独定义。

不过,如果您的系统真的像您描述的那样简单,那么您的设计就非常好。