似乎Ryan Bates停止开发CanCan。 Rails 4完全支持。而且,ready4rails4表示它不起作用。
我应该将CanCan替换为另一个授权库吗?
此致
答案 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。