簡體   English   中英

具有權威的視圖中的屬性級別授權

[英]Attribute level authorization in views with pundit

我正在使用專家在rails應用程序中進行授權。 對於某些型號,我需要屬性級授權。 例如,允許普通用戶更改其電話號碼但不能將其狀態設置為“管理員”。

作為推薦的權威人士文檔 ,我使用的是permitted_attributes這一點。

我現在想要在視圖中訪問這些屬性,以決定在表單中顯示或啟用哪些字段。 是否有一種(優雅的)方法可以在不重復授權字段的情況下執行此操作?

首先,您可能希望在ApplicationPolicy添加一些不錯的快捷方式,以便檢查是否允許屬性:

class ApplicationPolicy 
  #...

  def permits_attributes?(*attrs)
    attrs.keep_if({|a| permits_attribute?(a) }).any?
  end

  def permits_attribute?(attr)
    permitted_attributes.include?(attr)
  end

  # ...
end

然后,您可以創建自定義表單構建器(或擴展表單構建器的模塊):

class MyFormBuilder < ActionView::Helpers::FormBuilder
  def can_fill_in?(attr)
    yield if @template.policy(object).permits_attribute?(attr)
  end
end

<%= form_for(@project, builder: MyFormBuilder) do |f| %>
  <%= f.can_fill_in?(:title) do %>
    <%= f.label :title %>
    <%= f.text_field :title %>
  <% end %>
<% end %>

您還可以配置rails以默認使用自定義表單構建器:

ActionView::Base.default_form_builder = MyFormBuilder

看到:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM