1

users我的 Rails 项目中有projects脚手架。我还有一个admin控制器和视图,只有管理员用户才能访问。我希望and模型的indexandcreate控制器操作只能由视图访问(使用),但我不想让网站的访问者能够输入并获得部分渲染。我如何实现这一目标?usersprojectsadminrender :partial > 'index'http://railsapp.host/users

澄清一下,我的问题与用户角色无关。我有所有 require_admin 助手的 authlogic,但我什至不希望管理员用户能够直接从浏览器访问index路由。users实际上,我只想将index控制器操作限制为admin#index这样的视图代码:

<%= render '/users/index' %>
4

4 回答 4

2

最好的 rails 方法是在应用程序控制器中定义一个过滤器

 class UsersController < ApplicationController
   before_filter :check_isadmin?, :only => [:create, :index]
 end
 class ProjectsController < ApplicationController
   before_filter :check_isadmin?, :only => [:create, :index]
 end
 class ApplicationControlloller < ApplicationController
   def check_isadmin?
      current_user.admin?
    end
end
于 2012-11-03T13:28:46.287 回答
0

如果您为不同的用户使用角色,您可以检查管理员用户的角色,然后渲染部分,例如:

<% if user.isAdmin? %>
  <%= render 'index' %>
<% end %>
于 2012-11-03T13:23:37.150 回答
0

好吧,我应该说我是一个相对的菜鸟。不过我想通了。我以为

<%= render '/users/index' %>

实际上是通过users#index代码。我只是发现它只是在视图下调用部分而不通过控制器操作。所以我只是将它添加到users控制器中

def index
  redirect_to :controller=>'admin', :action=>'index'
end

这似乎实现了我所寻求的目标。

感谢你的帮助。

于 2012-11-03T13:56:15.637 回答
0

补充对我有帮助的 Aayush Khandelwal 答案before_filter 在 Rails 5 上已贬值。请改用 before_action。

class UsersController < ApplicationController
   before_action :check_isadmin?, :only => [:create, :index]
end

在 :check_isadmin? 如果为 false,则重定向到其他页面。

def check_isadmin?
  if current_user == nil || !current_user.admin?
    redirect_to root_path
  end
end 
于 2017-06-13T06:02:39.760 回答