0

这类似于我之前在这里问过的一个问题,但我并没有真正理解我真正的困惑在哪里。我查看了 CanCan 以定义自定义级别权限,但我不清楚如何允许普通用户创建他们想要的任何内容,但在创建实际记录之前,管理员必须进来并对其进行授权。

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

4

2 回答 2

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.

于 2013-09-03T14:39:07.147 回答
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
于 2013-09-03T14:43:52.957 回答