aBa*_*boy 11 ruby rubygems ruby-on-rails cancan ruby-on-rails-4
我的rails应用程序中有大约13个模型,我在所有这些模型上都使用了它.我的能力课程变得越来越大.我对不同的CRUD操作有不同的能力条件,这使得它很难管理.
有人可以指导我如何重构这个......?比如,使用模块或类来使我的能力课看起来很整洁.
dgi*_*rez 16
简单的场景:如果你可以在几个互斥的集合中分割权限,那么你应该从@ryanb,CanCan创建者那里检查这个提议,在那里他将这些能力分成几个不同的类,然后覆盖该current_ability方法.ApplicationController
更复杂的场景:如果您有多个不同的重叠权限集,则可以尝试以下方法:
# 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
...
Run Code Online (Sandbox Code Playgroud)
等等其他文件.