2

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

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

问候

4

1 回答 1

2

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

您可能想看看 Ryan 的“Authorization From Scratch”RailsCasts。

您可能还会发现以下代码片段很有用:

库/错误/

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。

于 2013-12-10T05:11:32.760 回答