2012-11-03 8 views
0

У меня есть users и projects леса в моем проекте Rails. У меня также есть контроллер и вид admin, доступный только пользователям admin. Я хочу index и create действия контроллера для моделей users и projects быть доступно только для admin зрения (с помощью render :partial > 'index'), но я не хочу, чтобы посетители сайта, чтобы иметь возможность ввести в http://railsapp.host/users и получить частичную визуализацию , Как мне это достичь?Rails - разрешить доступ к действию контроллера только на стороне сервера

Чтобы уточнить, моя проблема не в роли пользователя. У меня есть authlogic со всеми помощниками require_admin, но я даже не хочу, чтобы пользователь-администратор получал доступ к маршруту index для users непосредственно из браузера. В сущности, я хочу, чтобы ограничить действие index контроллера только вид код admin#index как это:

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

Простейший способ описан здесь: http://guides.rubyonrails.org/action_controller_overview.html#http-authentications. – jdoe

ответ

0

Ok, я бы сказал, что я родственник нуб рельсов. Я все понял. Я думал, что

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

действительно проходит через код users#index. Я просто понял, что это просто вызывает частичное под взглядами, не проходя через действия контроллера. Так что я просто добавил это к users контроллер

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

И это, кажется, чтобы достичь поставленной цели, я искал.

Благодарим за помощь.

0

Если вы используете роль для другого пользователя, вы можете проверить роль пользователя с правами администратора, то оказывать частичную, экс:

<% if user.isAdmin? %> 
    <%= render 'index' %> 
<% end %> 
+0

Спасибо за ответ. Я был неясно в своем вопросе - я только что отредактировал его. См. Править. – pvenky

+0

Я не понимаю, что вы хотите сделать, но если вы хотите установить возможности пользователей, вы можете попробовать камень [Can Can] (https://github.com/ryanb/cancan). – Thanh

+0

Thanh, у меня есть действие контроллера 'index # index', которое отображает частичное. Но эта частичная часть встроена в представление 'admin # index'. Я не хочу, чтобы кто-нибудь мог ввести «https: // localhost/users» и получить частичный. В сущности, мне нужно уметь определять в моем контроллере пользователей, будет ли запрос поступать с веб-адреса, введенного непосредственно в браузере, или при выполнении операции «admin # index». – pvenky

1

Лучшие рельсы способ определения фильтра в контроллере приложения

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 
+0

Спасибо за ответ. Я был неясно в своем вопросе - я только что отредактировал его. См. Править. – pvenky

0

Дополнение к Aayush Khandelwal ответ, который был полезен для меня before_filter амортизируется на Rails 5. Вместо этого используйте before_action.

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

и в: check_isadmin? redirecto на другую страницу, если false.

def check_isadmin? 
    if current_user == nil || !current_user.admin? 
    redirect_to root_path 
    end 
end 
Смежные вопросы