如何禁止匿名用户直接访问控制器(仅允许从另一个控制器访问)

时间:2014-08-14 11:06:29

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

如何让用户只有在访问过另一个控制器时才能访问控制器操作。

例如,我有一组产品将转到NumberController('new'action) - 我阻止匿名者直接转到NumberController中的新动作,只允许匿名用户来自Products页面匿名用户在此之前选择的。

我读过的一个解决方案是,您可以使用会话cookie来禁止用户访问NumberController中的新操作,另一个使用范围查询,例如:

Product.find(params[:id]).Number.find(params[:product_id]) 

或类似的东西,并使用嵌套资源。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这个答案贴在这个问题上:

Authorizing non-logged-in user behavior in rails with cancan and devise

说明了如何使用CanCan授权处理匿名(未登录)用户。这很简单。

另外,重要的是,CanCan目前已经过时了。 CanCanCan https://github.com/CanCanCommunity/cancancan)是CanCan的一个相当简单的替代品,可以积极维护,与Rails 4一起使用等。它可以很好地处理您的匿名用户问题。

答案 1 :(得分:0)

您是否尝试过cancanrolify

您可以使用它们为用户设置角色,以便能够验证此用户是否有角色(管理员)来访问此操作...