美文网首页RubyRuby on RailsRuby、Rails知识
在没有对应模型的控制器上使用cancancan

在没有对应模型的控制器上使用cancancan

作者: 海内寻知己 | 来源:发表于2017-12-01 21:20 被阅读7次

原创声明

此博客在简书创作,作者为海内寻知己,转载请注明原文出处和作者,不遵守以上规则禁止转载,请支持原创。

文章内容

此博客是对cancancan gem的Github上文档的翻译,原文(英文)链接为 此处

你可以在没有show/new/edit/destroy等action的controller上使用cancancan,然而,你不应该使用load_and_authorize_resource方法,因为这个controller没有对应的resource(资源)。你应该在这个controller的所有action上分别使用authorize!方法。

小提示:这跟在RESTful式的controller上加非RESTful action是不同的。想了解详细信息就去Authorizing Controller Actions页面的Choosing Actions 部分。

举个例子,假如我们有一个controller,它有一些各种各样的管理tasks,像查看log文件。我们在这里使用authorize!方法。

class AdminController < ActionController::Base
  def roll_logs
    authorize! :roll, :logs
    # roll the logs here
  end
end

并且之后在Ability类里添加authorize。
can :roll, :logs if user.admin?
注意你可以传递a symbol来作为第二个参数给上面的authorize!和can。它不必是a model class or instance。通常第一个argument是执行的动作,第二个是操作对象(被之前action操作的操作对象)。它可以是任何东西(译者注:“东西”在这里指单词)。

另一种方式:authorize_resource

另一种方式你可以使用authorize_resource并且设置它为no class。这种方式可以替换传递的资源符号。这是一个好的方式处理有一个好像有资源的controller,实质上没有对应的资源的controller。

class ToolsController < ApplicationController
  authorize_resource :class => false
  def show
    # automatically calls authorize!(:show, :tool)
  end
end

(译者注:
1、这里文档说明(示例代码注释里的说明)比较粗糙,该注释提示你在Ability类里添加authorize,像这样:
can :show, :tool if @user.admin?(你自己定义的判断)
2、这里不要在routes.rb文件里配置该controller的show方法为资源式路由
)

相关文章

  • 在没有对应模型的控制器上使用cancancan

    原创声明 此博客在简书创作,作者为海内寻知己,转载请注明原文出处和作者,不遵守以上规则禁止转载,请支持原创。 文章...

  • laravel控制器与模型名称不统一

    在使用laravel开发时,laravel控制器与模型名称不统一会造成resource资源不能正常的解析到对应的资...

  • NSCopying 协议 使用runtime实现

    使用场景 比如两个控制器之间使用数据模型传值时,在B控制器中更改模型的值,而不改变A控制器中模型的值.此时就需要将...

  • 2017-5-20 AngularJS 学习笔记

    控制器的作用域 每个控制器都对应一个模型,也就是 $scope 对象,不同层级控制器下的 $scope 产生了作用...

  • Struts Action 控制器

    控制器 即,mvc模型的控制器模型,用于接收数据,传递给视图层,和模型层默认使用execute方法 查看相关接口 ...

  • thinkphp v5 模型的增删改查

    模型定义 模型调用 模型类可以使用静态调用或者实例化调用两种方式 在模型中调用 在控制器调用模型 添加数据 实例化...

  • rails基于devise+cancancan+rolify的简

    NO.1 引入cancancan和rolify gem 'cancancan', '~>1.10'gem "rol...

  • THREEJS 笔记4 控制器篇

    threeJS 支持多种控制器,每个控制都必须加载对应的控制器插件后才能使用。控制器不仅能使用鼠标移动镜头,还能通...

  • MVC MVP MVVM

    一:MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器) Model(模型...

  • rails中使用cancancan

    之前接手了一个项目,用了很多很多的gem包,可以说到了泛滥的地步,当然这其中也包含cancancan了,只是用了其...

网友评论

    本文标题:在没有对应模型的控制器上使用cancancan

    本文链接:https://www.haomeiwen.com/subject/yhtgbxtx.html