用于配置文件的Ruby on Rails中的块级助手

时间:2012-05-09 22:53:40

标签: ruby-on-rails ruby helpers

我正在使用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

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

2 个答案:

答案 0 :(得分:1)

为什么不使用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

答案 1 :(得分:1)

就像你在尝试重新创建CanCan宝石一样:

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可以很好地配合设计,提供整体认证/授权策略。