Ryan Bates 似乎停止开发 CanCan。没有完全支持 Rails 4。而且,ready4rails4 说它不起作用。
我应该用另一个授权库替换 CanCan 吗?
问候
Ryan Bates 似乎停止开发 CanCan。没有完全支持 Rails 4。而且,ready4rails4 说它不起作用。
我应该用另一个授权库替换 CanCan 吗?
问候
由于您提到的原因,太多未解决的问题和未解决的拉取请求,我不再在新项目中使用 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。