灵感来自这里https://github.com/kristianmandrup/cantango/wiki/CanCan-vs-CanTango
如果权限不多,我们可以通过这种方式来定义
class CanCan::Abilitydef initialize user, options = {}if !usercan :read, :allendif useradmin_rules if user.roles.include? :admineditor_rules if user.roles.include? :editordefault_rulesendenddef admin_rulescan :manage, :allenddef editor_rulescan :manage, [Article, Post]end
end
改的灵活点
class CanCan::Abilitydef initialize user, options = {}user ? user_rules : guest_user_rulesenddef user_rulesuser.roles.each do |role|exec_role_rules(role) if user.roles.include? roleenddefault_rulesenddef exec_role_rules rol