我正在构建一个具有两种不同资源的 Rails 应用程序,这些资源代表用户类型 - 租户和房东。
我通过 Devise 设置了身份验证,并使用 CanCan 对其中一个资源进行了授权。
我不想让它们成为相同用户资源的类型,因为它们与应用程序中的其他资源有不同的关系(例如,一个属性属于_房东,但有_许多租户)。
我找到了很多关于如何为具有多个角色的单个资源(例如,具有管理员角色的用户)设置 Cancan 的信息,但是对于如何同时处理多个资源的授权却一无所知。
谁能指出我正确的方向?
我正在构建一个具有两种不同资源的 Rails 应用程序,这些资源代表用户类型 - 租户和房东。
我通过 Devise 设置了身份验证,并使用 CanCan 对其中一个资源进行了授权。
我不想让它们成为相同用户资源的类型,因为它们与应用程序中的其他资源有不同的关系(例如,一个属性属于_房东,但有_许多租户)。
我找到了很多关于如何为具有多个角色的单个资源(例如,具有管理员角色的用户)设置 Cancan 的信息,但是对于如何同时处理多个资源的授权却一无所知。
谁能指出我正确的方向?
好吧,从我的脑海中,你可以做这样的事情:
--models>>ability.rb:
class Ability
include CanCan::Ability
def initialize(user)
if user.class.name=='Landlord'
can :manage, :all
elif user.class.name=='Tenant'
can :read, :all
else
can :read, :all
end
end
end
您可以向表中添加一role
列users
并使用不同的角色填充此字段。
$ rails generate migration AddRoleToUsers role:string
更新models/ability.rb
文件以自定义授权:
class Ability
include CanCan::Ability
def initialize(user)
if user.nil?
can :read, :all
elsif user.role == "landlord"
can :manage, :all
elsif user.role == "tenant"
can :read, :all
can :create, ToDoList
can :update, ToDoList do |to_do_list|
to_do_list.user == user
end
can :destroy, ToDoList do |to_do_list|
to_do_list.user == user
end
end
end
end