Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 cancancan不授权控制器操作_Ruby On Rails 4_Mongoid_Cancancan - Fatal编程技术网

Ruby on rails 4 cancancan不授权控制器操作

Ruby on rails 4 cancancan不授权控制器操作,ruby-on-rails-4,mongoid,cancancan,Ruby On Rails 4,Mongoid,Cancancan,我有一个带discard函数的命名空间post控制器。我已经设置了能力类,这样只有当post saved属性为false时,post的所有者才能进行放弃 class User::PostsController < User::BaseController authorize_resource :class => 'Post' . . . def discard @post.destroy respond_to do |format|

我有一个带discard函数的命名空间post控制器。我已经设置了能力类,这样只有当post saved属性为false时,post的所有者才能进行放弃

class User::PostsController < User::BaseController
  authorize_resource :class => 'Post' 


  .
  .
  .
  def discard

    @post.destroy
    respond_to do |format|
      format.html { redirect_to user_posts_url, notice: 'Post was successfully discarded.' }
      format.json { head :no_content }
    end

  end
end



class UserAbility
  include CanCan::Ability

  def initialize(user)
    can [:discard], User::Post, :user => user
    cannot [:discard], User::Post, :saved => true
  end
end
class User::PostsController'Post'
.
.
.
def丢弃
@事后销毁
回应待办事项|格式|
format.html{redirect_to user_posts_url,注意:'Post已成功放弃。}
format.json{head:no_content}
结束
结束
结束
类可使用性
包括CanCan::能力
def初始化(用户)
can[:discard],User::Post,:User=>User
无法[:放弃],用户::发布,:保存=>true
结束
结束
但是,即使保存的属性为true,也可以丢弃帖子。但是在视图里面,

if can? :discard, @post
  <some action>
end
如果可以的话:丢弃,@post
结束
一切正常。我认为这是因为cancan只授权模型,而不授权控制器操作。有没有办法让它授权控制器操作?
PS:我使用mongoid。

这只是一个示例方法。未授权所有控制器操作。这将有助于提高效率you@uzaif谢谢我已经试过了,效果不错。但是有没有比手动授权控制器内的所有操作更好的方法?为什么需要其他方法?@uzaif我现在做的是授权所有控制器内的每个方法。相反,有没有一种方法可以用一行程序授权整个控制器?