这类似于我之前在这里问过的一个问题,但我并没有真正理解我真正的困惑在哪里。我查看了 CanCan 以定义自定义级别权限,但我不清楚如何允许普通用户创建他们想要的任何内容,但在创建实际记录之前,管理员必须进来并对其进行授权。
例如,用户可以创建项目,这些项目必须属于特定的状态。我的管理员每个人都属于一个特定的州,他们必须批准在他们的州创建的任何新项目。有没有办法用 CanCan 做到这一点,还是有另一种方法可以做到这一点?
这类似于我之前在这里问过的一个问题,但我并没有真正理解我真正的困惑在哪里。我查看了 CanCan 以定义自定义级别权限,但我不清楚如何允许普通用户创建他们想要的任何内容,但在创建实际记录之前,管理员必须进来并对其进行授权。
例如,用户可以创建项目,这些项目必须属于特定的状态。我的管理员每个人都属于一个特定的州,他们必须批准在他们的州创建的任何新项目。有没有办法用 CanCan 做到这一点,还是有另一种方法可以做到这一点?
您可以允许所有用户创建项目,但只允许管理员批准它们。在项目索引页面上,您只能列出已批准的项目。
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
.
它是您的应用程序逻辑。
您应该有一个表格或一个标志字段来说明项目是否被批准。普通用户只会看到批准的项目
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