1

Railsプロジェクトに足場がusersあります。projectsまた、admin管理者ユーザーのみがアクセスできるコントローラーとビューもあります。およびモデルのindexおよびcreateコントローラーアクションに(を使用して)ビューにのみアクセスできるようにしたいのですが、サイトへの訪問者が入力して部分的にレンダリングできるようにしたくありません。どうすればこれを達成できますか?usersprojectsadminrender :partial > 'index'http://railsapp.host/users

明確にするために、私の問題はユーザーの役割に関するものではありません。私はすべてのrequire_adminヘルパーを備えたauthlogicを持っていますが、管理者ユーザーがブラウザーから直接indexルートにアクセスできるようにしたくありません。実際には、コントローラーのアクションを次のようなビューコードのみにusers制限したいと思います。indexadmin#index

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

4 に答える 4

2

最良の方法は、アプリケーションコントローラーでフィルターを定義することです

 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

Rails5ではbefore_filterが減価償却される前に私に役立ったAayushKhandelwalの回答を補完します。代わりに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 に答える