【问题标题】:Block level helpers in Ruby on Rails for config fileRuby on Rails 中用于配置文件的块级助手
【发布时间】:2012-05-09 22:53:40
【问题描述】:

我正在使用 Ruby 1.9 在 RoR 3.1 上开发一个网站。 我想为这样的用户角色创建一个配置文件(RAILS_ROOT/config/roles.rb):

auth do
    roles :admin do
        auth_on :blogs, :to => [:create, update, :destroy]
        auth_on :comments, :to => [:create, update, :destroy]
    end

    roles :moderator do
        auth_on :blogs, :to => [update]
        auth_on :comments, :to => [:create, update] do
            where_attribute :user => current_user
        end
    end
end

这个想法是解析文件并为角色设置变量。您知道如何实现这种帮助程序以及如何逐块解析文件吗?如果您对创建一个简单的配置文件有其他想法,请告诉我!

【问题讨论】:

    标签: ruby-on-rails ruby helpers


    【解决方案1】:

    这就像您在尝试重新创建 CanCan gem:

    https://github.com/ryanb/cancan

    使用 cancan 可以创建一个指定权限的ability.rb 文件。这是一个例子:

    class Ability
      include CanCan::Ability
    
      def initialize(user)
        user ||= User.new # guest user (not logged in)
        if user.admin?
          can :manage, :all
        else
          can :read, :all
        end
      end
    end
    

    然后在您的视图(或控制器)中,您允许像这样访问:

    <% if can? :update, @article %>
      <%= link_to "Edit", edit_article_path(@article) %>
    <% end %>
    

    因此,我建议您先看看这是否能满足您的需求,而不是自己构建一些东西。如果没有,您至少可以对如何继续您的想法有所了解。此外,cancan 与提供整体身份验证/授权策略的设计配合得很好。

    【讨论】:

    • 是的,你是对的。事实上,我尝试做一些我已经使用过的“声明式授权” gem link。即使 CanCan 和 DA 是很棒的宝石,我也想尝试使用这种“块助手”自己做一些事情。感谢您的帮助。
    • 很高兴我能提供帮助。祝你的项目好运。 (如果您认为我的回答是正确的并且对您有所帮助,我将不胜感激。谢谢 -K)
    • 是的,但我实际上只有 6 个声望 :(
    • 哈哈,谢谢。我给了你一个赞成票,所以你很快就会到那里!
    【解决方案2】:

    为什么不使用 YAML?像

    roles.yml:

    roles:
      admin:
        blogs:
          create:
          update:
          destroy:
        comments:
          create:
          update:
    

    然后类似

    require 'yaml'
    roles = YAML::load(File.open("roles.yml"))['roles']
    roles.each do |user, role|
      role.each do |part,privs|
        privs.keys.each do |priv|
          setPrivilegeFor(user, part, priv)
        end 
      end
    end
    

    【讨论】:

    • 是的,这是一个很好的解决方案,我已经在另一个网站上实施了。但我想尝试仅使用 Ruby 的其他东西。对不起,我忘了提。顺便说一句,谢谢!
    猜你喜欢
    • 2015-03-03
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2015-10-15
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多