Rails:如何使用户能够创建记录,但在发布之前需要管理员批准

时间:2013-09-03 14:10:47

标签: ruby-on-rails permissions authorization admin cancan

这类似于我在here之前提出的问题,但我并不真正理解我的实际困惑在哪里。我已经看过CanCan定义自定义级别权限,但我不清楚如何让普通用户创建他们想要的任何东西,但在创建实际记录之前,管理员必须进入并授权它。 / p>

例如,用户可以创建项目,这些项目必须属于特定的州。我的管理员各自属于某个特定州,他们必须批准在其州内创建的任何新项目。有没有办法用CanCan做到这一点,还是有另一种方法可以做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以允许所有用户创建项目,但只允许管理员批准这些项目。在项目索引页面上,您只能列出已批准的项目。

class Ability
  include CanCan::Ability

  def initialize(user)
    can :create, Project

    if user && user.admin?
      can :approve, Project
    end

  end
end

项目管理员:

def index
  @projects = Project.where(approved: true)
end

def approve
  if can? :approve, Project
    @project.update_attributes approved: true
  end
end

我假设使用approved: false创建了新项目。

答案 1 :(得分:0)

它是你的应用程序逻辑。

你应该有一个表或一个标志字段来告诉项目是否被批准。 普通用户只能看到已批准的项目

def index
   @projects = Project.where(approved: true)
end

(或使用default_scope)

管理员会有一份批准他自己州项目的清单

def approve_list
   @projects = Project.where("approved = ? AND state_id= ?", false, params[:state_id])
end