可以从数据库加载专家策略



我喜欢Pundit Gem的简单性,我想通过将它们存储到数据库来使政策动态。

基本上,我正在寻找一种能够更改策略而无需重新部署应用程序的方法。

1st Way

Pundit策略是纯粹的Ruby代码,因此,如果您不想将代码保留在数据库中并动态评估,我会说答案是否定的。这是不安全的。不过,您可以尝试一下。

2nd Way

class PostPolicy < ApplicationPolicy
  def update?
    access_setting = PolicySetting.find_by(key: self.class_name)
    user.role.in?(access_setting['roles'])
  end
end

当然,该工具的复杂性和灵活性直接取决于彼此。

3rd Way

只是在工作。您可以将授权项目与主要项目区分开来,以便部署(当然为零时间)不会影响主要的大项目。

第四路

创建自己的DSL以存储在数据库中

第五条

使用JSON-Logic-Ruby之类的东西将逻辑存储在数据库中

最新更新