我有一个应用程序,其中有不同的权限层可以管理,或者只是创建/查看/查看不同的对象。我故障的一个例子:
- 主人可以查看餐厅的预订,并进行编辑,但不能创建
- 门卫可以创建一个新的预订,并编辑。
- 客户服务代表(在我们这边),几乎可以做所有事情。
- 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
这没有测试,需要适应您的确切情况,但我希望这是一个起点。