可以在Rails 4中完全支持CanCan

时间:2013-12-10 04:46:44

标签: ruby-on-rails devise ruby-on-rails-4 cancan pundit

似乎Ryan Bates停止开发CanCan。 Rails 4完全支持。而且,ready4rails4表示它不起作用。

我应该将CanCan替换为另一个授权库吗?

此致

1 个答案:

答案 0 :(得分:2)

由于您提到的原因,太多未解决的问题和未解决的拉取请求,我不再在新项目中使用CanCan。

你可能想看看Ryan的“Scratch授权”RailsCasts。

您可能还会发现以下代码段的有用信息:

LIB /错误/

module Errors
  class NotAuthorizedError < StandardError; end
end

应用程序/控制器/ application_controller.rb

class ApplicationController < ActionController::Base

  def authorize(record)
    raise Errors::NotAuthorizedError unless policy(record).public_send(params[:action] + "?")
  end

  def policy(record)
    "#{record.class}Policy".constantize.new(current_user, record)
  end
end

应用程序/策略/ user_policy.rb

class UserPolicy

  attr_reader :user, :current_user

  def initialize(current_user, user)
    @current_user = current_user
    @user = user
  end

  def update?
    user == current_user
  end
end

应用程序/控制器/

class UsersController

  def update
    @user = User.find(params[:id])
    authorize(@user)
    # etc
  end
end

我目前在所有新应用中使用的此解决方案基于以下优秀文章:http://www.elabs.se/blog/52-simple-authorization-in-ruby-on-rails-apps。实现和测试非常简单,您可以轻松地使其适应您的应用程序需求。

祝你好运取代CanCan。