如何在Rails中实现每页授权

时间:2016-06-14 08:39:19

标签: ruby-on-rails

Rails有一些非常好的基于角色授权的方法,例如cancan

但是如何授予特定页面的授权,而不是控制器/操作。

例如,以包含收据或发票模型的应用为例。用户可以登录并生成发票。然后,用户需要向其客户发送该发票的URL。客户不应该能够访问其他客户的发票,尤其重要的是,因为Rails生成顺序且易于猜测的路径名称(例如,/ invoices / 1,/ invoices / 2等)。

理想情况下,客户不需要注册即可查看这些页面。一种解决方案可能是在创建发票时生成随机密码,并将其发送给客户以解锁该页面特定页面。

这听起来像是一个应该相当常见的问题,但在谷歌搜索之后我没有找到太多使用信息(尽管我可能使用了不正确的搜索词)。

所以我想知道:

  1. 这是我应该尝试使用Rails的吗?
  2. 我可以学习任何宝石或示例应用吗?
  3. 这种方法有哪些潜在的考虑因素/陷阱?

2 个答案:

答案 0 :(得分:0)

如果您希望访问的用户已在系统中注册,那么根本不会产生任何问题,因为您可以生成许可记录。

您对可预测网址的关注如何通过以下方式轻松解决: FriendlyID(https://github.com/norman/friendly_id) 或者我个人的最爱 虚荣永久链接(http://blog.teamtreehouse.com/creating-vanity-urls-in-rails

答案 1 :(得分:0)

  

理想情况下,客户不需要注册即可查看这些页面。一种解决方案可能是在创建发票时生成随机密码,并将其发送给客户以解锁该页面特定页面。

所以拥有这些信息的人都应该可以访问它。一种解决方案是对网址进行模糊处理或使用UUID,因此不要给出/invoices/1,而应给出/invoices/8a20ae59-30d5-41b6-86d3-ac66e3b43e9d。网址是不可思议的。网址仍然是访问内容所需的唯一信息。

如果您需要双因素授权,那么最简单的方法是使用http basic auth,从url和您的secret_base生成密码,并将其单独发送给用户。生成后,您不需要存储它,您可以随时再次生成它来检查它。