这类似于我在here之前提出的问题,但我并不真正理解我的实际困惑在哪里。我已经看过CanCan定义自定义级别权限,但我不清楚如何让普通用户创建他们想要的任何东西,但在创建实际记录之前,管理员必须进入并授权它。 / p>
例如,用户可以创建项目,这些项目必须属于特定的州。我的管理员各自属于某个特定州,他们必须批准在其州内创建的任何新项目。有没有办法用CanCan做到这一点,还是有另一种方法可以做到这一点?
答案 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