Ruby on rails 使用Pundit授权控制器
我正在学习使用权威进行授权。但在我看来,这是对资源的授权,而不是对页面的授权。我希望用户被重定向到一个未经授权的页面,如果他/她没有授权访问该页面使用权威 例如Ruby on rails 使用Pundit授权控制器,ruby-on-rails,ruby-on-rails-4,pundit,Ruby On Rails,Ruby On Rails 4,Pundit,我正在学习使用权威进行授权。但在我看来,这是对资源的授权,而不是对页面的授权。我希望用户被重定向到一个未经授权的页面,如果他/她没有授权访问该页面使用权威 例如 class OnlyAdminCanVisitController < ApplicationController before_filter :admin_authenticate 仅类AdminCanvisitController
class OnlyAdminCanVisitController < ApplicationController
before_filter :admin_authenticate
仅类AdminCanvisitController
停止非管理员角色用户
此外,我还想处理以下虚构场景(考虑到有4个角色,分别是管理员、经理、员工和局外人。下面的设计显然很糟糕)
class AdminManagerCanVisitController
我有4个角色,希望为这些控制器编写权威政策,允许任何授权组合
让我知道,如果专家是为了解决这个问题
谢谢实际上,页面和资源之间没有太大区别。因此,您可以通过从
应用程序\u controller.rb营救被拒绝的授权来解决问题:
class ApplicationController < ActionController::Base
include Pundit
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
protected
def admin_authenticate
authorize current_user, :admin?
end
private
def user_not_authorized(exception)
# Redirect to whatever page you want if not authorized
end
end
然后在其他控制器中,只需执行以下操作:
class OnlyAdminCanVisitController < ApplicationController
before_action :admin_authenticate
end
仅类AdminCanvisitController
实际上,页面和资源之间没有太大区别。因此,您可以通过从应用程序\u controller.rb营救被拒绝的授权来解决问题:
class ApplicationController < ActionController::Base
include Pundit
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
protected
def admin_authenticate
authorize current_user, :admin?
end
private
def user_not_authorized(exception)
# Redirect to whatever page you want if not authorized
end
end
然后在其他控制器中,只需执行以下操作:
class OnlyAdminCanVisitController < ApplicationController
before_action :admin_authenticate
end
仅类AdminCanvisitController
谢谢..它解决了我一半的问题。另一半是如果我在那里有4个角色4!授权组合例如,4个组合中有2个是合格的,或者4个组合中有3个是合格的,我不能为这些组合中的每一个都使用身份验证功能…如果我遗漏了什么,请告诉我..好的。你能用你的角色代码更新你的帖子吗?这样问题就更清楚了。这将取决于您如何设计用户/角色组合。策略规则适用于用户对象。您是如何在模型/数据库级别设计角色的?角色是一个表,通过用户角色表与用户有多对多关系。这很简单。在您的策略文件(UserPolicy
或ApplicationPolicy
)中,create有许多您需要的规则(如admin?
)。为了在控制器内保持干燥,您可以使用关注点
或包装一个实用函数来处理要检查的角色。我的例子是基于一个角色,但同样可以应用于许多角色。谢谢。它解决了我一半的问题。另一半是如果我在那里有4个角色4!授权组合例如,4个组合中有2个是合格的,或者4个组合中有3个是合格的,我不能为这些组合中的每一个都使用身份验证功能…如果我遗漏了什么,请告诉我..好的。你能用你的角色代码更新你的帖子吗?这样问题就更清楚了。这将取决于您如何设计用户/角色组合。策略规则适用于用户对象。您是如何在模型/数据库级别设计角色的?角色是一个表,通过用户角色表与用户有多对多关系。这很简单。在您的策略文件(UserPolicy
或ApplicationPolicy
)中,create有许多您需要的规则(如admin?
)。为了在控制器内保持干燥,您可以使用关注点
或包装一个实用函数来处理要检查的角色。我的示例基于一个角色,但同样的情况也可以应用于多个角色。