我正在构建一个rails应用程序,它有两个不同的资源,代表用户类型 - 租户和房东。
我通过Devise进行身份验证,并使用CanCan对其中一个资源进行授权。
我不想让它们成为相同用户资源的类型,因为它们与应用程序中的其他资源有不同的关系(属性属于房东,但是有很多租户,例如)。
我已经找到了很多关于如何为具有多个角色的单个资源(例如具有管理员角色的用户)设置Cancan的信息,但是关于如何在同一时间处理多个资源的授权,我现在空了时间。
有人能指出我正确的方向吗?
答案 0 :(得分:2)
- 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
答案 1 :(得分:0)
您可以在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