2012-12-15 40 views
0

我想一个secific路线限制为仅“current_user.account_level ==‘1’,”如何根据用户属性限制rails中的路由?

到目前为止,我有这个,但我想不通的约束部分:

resources :users, :only => [:show, :index], :constraints => {}

我在做什么错?

+1

为什么无法通过before_filter解决? – siddick

+1

它看起来像你试图以某种奇怪的方式实现授权。通常它属于控制器。看看CanCan的宝石,以一种干净的方式实现它:https://github.com/ryanb/cancan – cthulhu

+0

嗯......我想我会与CanCan一起滚动,你是礼仪。我之前避免了这种情况,因为我能够以更简单的方式解决问题,但是我已经做了足够多的时间让我认为我应该只是需要它。 – sevens

回答

0

我想,下面的工作。

match '/:id' => 'users#show', :constraints => { :account_level=>'1' } 
match '/' => 'users#index', :constraints => { :account_level=>'1' } 
resources :users 


约束部分,我们可以给正则表达式。
例如: resources :users, :only => [:show, :index], :constraints => { ::account_level => /\1/ }
根据CURRENT_USER否则给用户控制器内的条件。

if current_user.account_level == "1" 
    ---code--- 
else 
    ---code--- 
end 
+0

它没有。它允许每个人看到“/用户” – sevens

+0

仍然是一个不行。我不明白你想要做什么是你如何确定“account_level”?这需要限制在“current_user”范围内,以便系统知道谁来检查“account_level”。 – sevens

+0

'match'/:id'=>'users#show',:constraints => {:account_level =>'1'}''match'/'=>'users#index',:constraints => {:account_level =>'1'}' – VenkatK