我的rails应用程序中大约有13个模型,我在所有模型上都使用了功能。我的能力课已经变得越来越庞大。我对不同的CRUD Action 有不同的能力条件,这使得管理起来很困难。
有人可以指导我如何重构它吗?例如,使用模块或类使我的能力类看起来更整洁。
最佳答案
简单场景:如果可以将权限划分为几个互斥的集合,则应从Cancan创建者@ryanb处检查此建议,他在其中将能力划分为几个不同的类,然后覆盖current_ability
中的ApplicationController
方法
How you can break up large Ability class in CanCan - Gists
更为复杂的场景:如果您有几个不同的重叠权限集,则可以尝试以下方法:
# app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
self.merge Abilities::Everyone.new(user)
if user
self.merge Abilities::Admin.new(user) if user.admin?
self.merge Abilities::Authenticated.new(user)
else
self.merge Abilities::Guest.new(user)
end
end
end
# app/models/abilities/admin.rb
module Abilities
class Admin
include CanCan::Ability
def initialize(user)
# define abilities here ...
end
end
end
# app/models/abilities/everyone.rb
...
对于其余文件,依此类推。
关于ruby-on-rails - Rails CanCan gem重构能力等级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22530865/