Ruby on rails Rails/CanCan:对多个资源的授权?
我正在构建一个rails应用程序,它有两种不同的资源来代表用户类型——租户和房东 我通过Desive设置了身份验证,并使用CanCan对其中一个资源进行了授权 我不想让它们成为同一用户资源的类型,因为它们与应用程序中的其他资源有不同的关系(例如,一个属性属于一个房东,但有许多租户) 我已经找到了很多关于如何为具有多个角色的单个资源(例如,具有管理员角色的用户)设置Cancan的信息,但是对于如何同时处理多个资源的授权,我却一无所获Ruby on rails Rails/CanCan:对多个资源的授权?,ruby-on-rails,ruby-on-rails-3,cancan,Ruby On Rails,Ruby On Rails 3,Cancan,我正在构建一个rails应用程序,它有两种不同的资源来代表用户类型——租户和房东 我通过Desive设置了身份验证,并使用CanCan对其中一个资源进行了授权 我不想让它们成为同一用户资源的类型,因为它们与应用程序中的其他资源有不同的关系(例如,一个属性属于一个房东,但有许多租户) 我已经找到了很多关于如何为具有多个角色的单个资源(例如,具有管理员角色的用户)设置Cancan的信息,但是对于如何同时处理多个资源的授权,我却一无所获 有人能给我指出正确的方向吗?好的,从我的头顶,你可以这样做: -
有人能给我指出正确的方向吗?好的,从我的头顶,你可以这样做: --型号>>能力.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
您可以将
角色
列添加到用户
表中,并使用不同的角色填充此字段
$ 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
如果你这样做,我会推荐easy_角色宝石。它在github上提供,非常方便。