ruby-on-rails - 是否可以使用具有两个能力等级的康康

标签 ruby-on-rails ruby-on-rails-3 devise cancan

我正在使用 rails 3.0.9、cancan 1.6.7 和 devise 1.4.8

我正在使用两种设计模型(用户和管理员)进行不同的登录和注册过程

所以我想根据登录用户(资源)来划分能力,因为有超过
70个模型,只有10个模型对两种类型的用户都是通用的(这里有50多个模型和 View 仅供管理员用户使用)

我想实现两个能力类(UserAbility 和 AdminAbility),并且设计助手方法 current_user/current_admin 应该传递给 UserAbility/AdminAbility

例子:

在 ApplicationController.rb 文件中

    def current_ability
        if current_user
            @current_ability = UserAbility.new(current_user)
        elsif current_admin
            @current_ability = AdminAbility.new(current_admin)
        end
    end

从上面我的问题,
  • cancan 中是否可以有多个能力类,如果可能,那么如何创建它,因为我尝试过
    rails g cancan:user_ability
    但我得到的错误是 找不到生成器 cancan:user_ability .
  • 如何为登录的用户/管理员选择合适的能力等级。
  • 如果用户和管理员都访问 Controller ,那么我如何获取当前登录的用户/管理员对象

  • 有没有其他解决方案?

    任何人请帮助解决这个问题

    最佳答案

    ...也就是说,如果您愿意,可以直接使用多个能力模型:

    class UserAbility
      include CanCan::Ability
    
      def initialize(user)
        can :read, :all
      end
    end
    
    class AdminAbility
      include CanCan::Ability
    
      def initialize(admin)
        can :manage, :all
      end
    end
    
    class ApplicationController < ActionController::Base
      # overriding CanCan::ControllerAdditions
      def current_ability
        if current_account.kind_of?(AdminUser)
          @current_ability ||= AdminAbility.new(current_account)
        else
          @current_ability ||= UserAbility.new(current_account)
        end
      end
    end
    

    关于ruby-on-rails - 是否可以使用具有两个能力等级的康康,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12748056/

    相关文章:

    ruby-on-rails - 随机搜索结果

    ruby-on-rails - 将 'material-ui' 与 React-rails gem 一起使用?

    ruby-on-rails - 在某些特殊情况下如何跳过事件记录验证?

    ruby-on-rails - Rails - json.erb 模板

    ruby-on-rails - 在 rails Controller 中访问设备 current_user 变量

    ruby - Rails3 : Functional tests fail with NoMethodError: undefined method `user' for nil:NilClass

    ruby-on-rails - ImageMagick/RMagick - 无法安装 RMagick 2.13.1。找不到 Magick 配置

    ruby-on-rails-3 - 不要使用 solr.StandardTokenizerFactory 在下划线处拆分

    cookies - Rails 3,没有带有 :domain => :all 的本地 session cookie

    ruby-on-rails - 根据用户代理和/或 ip 更改重置 session 。带 Devise 的 Rails