Rails有一些非常好的基于角色授权的方法,例如cancan
但是如何授予特定页面的授权,而不是控制器/操作。
例如,以包含收据或发票模型的应用为例。用户可以登录并生成发票。然后,用户需要向其客户发送该发票的URL。客户不应该能够访问其他客户的发票,尤其重要的是,因为Rails生成顺序且易于猜测的路径名称(例如,/ invoices / 1,/ invoices / 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生成密码,并将其单独发送给用户。生成后,您不需要存储它,您可以随时再次生成它来检查它。