铁轨中的高级角色权限



我有一个应用程序,其中有不同的权限层可以管理,或者只是创建/查看/查看不同的对象。我故障的一个例子:

  • 主人可以查看餐厅的预订,并进行编辑,但不能创建
  • 门卫可以创建一个新的预订,并编辑。
  • 客户服务代表(在我们这边),几乎可以做所有事情。
  • Superadmin可以做所有事情。

我可以用来照顾这个宝石或可安装的发动机吗?最好的做法是什么?

cancan是一个不错的选择,但最近我一直将专家视为更好的选择。在您的情况下,您会有这样的东西:

# app/policies/reservation_policy.rb
ReservationPolicy = Struct.new(:user, :reservation) do
  def create?
    user.service_rep? || user.doorman?
  end
end

然后在您的控制器中:

# app/controllers/reservations_controller.rb
class ReservationsController < ApplicationController
  def create
    @reservation = Reservation.new(reservation_params)
    authorize @reservation
    @reservation.save
    respond_with(@reservation)
  end
end

这没有测试,需要适应您的确切情况,但我希望这是一个起点。

最新更新