2016-09-10 3 views
1

Я только начинаю работать в рельсах, и у меня есть небольшая проблема.Назначить проекты нескольким пользователям

Представьте, что у вас есть типы пользователей: клиент и администратор. Оба они хранятся в одной и той же модели пользователя с логическим значением (admin = true/false). Вот как я различаю их. Итак, теперь есть проекты. Это только сообщения с несколькими атрибутами, такими как Name, Description, Category ...

Я хочу, чтобы мои администраторы увидели все проекты, и у него должна быть возможность редактировать этот проект, но в то же время я хочу показать Клиенту Пользователь только Проекты, которым он назначен, и он не должен их редактировать.

Так заключая: Admin -> Посмотреть все сообщения и иметь возможность редактировать и назначить в них Клиентов

Client -> Просмотр проектов он присвоенные, но не в состоянии изменить их. Он должен видеть только те, кому он назначен.

Как это сделать?

+0

гугле Вы это? Вы вряд ли можете первыми захотеть разных ролей в своем приложении ... – Robert

ответ

0

Сделать проект принадлежащим пользователю. Это влечет за собой:

  • порождают миграцию, чтобы добавить колонку DB (выполнить эту команду):

    $ rails g migration AddUserToProjects user:references 
    
  • добавить ассоциацию к вашей Project модели (app/models/project.rb):

    belongs_to :user 
    
  • Добавить ассоциацию в вашу модель User (app/models/user.rb):

    has_many :projects 
    

В контроллере Projects, вы хотите иметь действия для следующих целей:

  • список проектов для пользователя
  • список админ о всех проектов

Это может быть так (app/controllers/projects_controller.rb):

class ProjectsController < ApplicationController 
    before_action :authenticate_user! 
    before_action :verify_admin_status, :only => [:admin_list] 

    def user_list 
    @projects = current_user.projects 
    end 

    def admin_list 
    @projects = Project.all 
    end 

    private 
    def verify_admin_status 
     unless current_user.admin 
     raise ActionController::RoutingError.new('Not Found') # or whatever other error you want, i.e. 403 
     end 
    end 
end 

Добавить маршруты в файл config/routes.rb:

get 'projects/mine', :to => 'projects#user_list' 
get 'projects/admin', :to => 'projects#admin_list' 

Возьмем аналогичный подход для определения редактирования действий: убедитесь, что пользователь, который пытается получить доступ к нему является администратором с помощью verify_admin_status обратного вызова, то выберите (или обновите) запись проекта.

+0

Это сработало отлично для меня. –

0

проверка в ваших взглядах и действиях контроллера

if current_user.admin 
Смежные вопросы