【问题标题】:Assign Projects to multiple Users将项目分配给多个用户
【发布时间】:2016-09-10 21:25:34
【问题描述】:

我刚刚开始使用 Rails,但遇到了一个小问题。

想象一下,您必须拥有以下用户类型:客户和管理员。两者都使用布尔值 (admin=true/false) 存储在同一个用户模型中。这就是我区分它们的方式。所以现在有项目。这些只是具有多个属性的帖子,例如名称、描述、类别...

我希望我的管理员查看所有项目,他应该能够编辑这些项目,但同时我想只向客户用户显示他被分配到的项目,他不应该能够编辑那些。

所以总结:管理员 -> 查看所有帖子并能够编辑和分配客户给他们

客户 -> 查看他被分配但无法编辑的项目。他应该只看到分配给他的那些人。

我该怎么做?

【问题讨论】:

  • 你用谷歌搜索过这个吗?你很难成为第一个想要在他的应用程序中扮演不同角色的人......

标签: ruby-on-rails login devise


【解决方案1】:

使项目属于用户。这需要:

  • 生成迁移以添加 DB 列(运行此命令):

    $ rails g migration AddUserToProjects user:references
    
  • 将关联添加到您的 Project 模型 (app/models/project.rb):

    belongs_to :user
    
  • 将关联添加到您的 User 模型 (app/models/user.rb):

    has_many :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 回调检查尝试访问它的用户是否是管理员,然后选择(或更新)项目记录。

【讨论】:

    【解决方案2】:

    检查您的视图和控制器操作

    if current_user.admin 
    

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2014-11-29
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      相关资源
      最近更新 更多