1

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

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

4

2 回答 2

1

为什么不使用 YAML?就像是

角色.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
于 2012-05-09T23:26:16.183 回答
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 可以很好地与提供整体身份验证/授权策略的设计配合使用。

于 2012-05-10T02:47:17.913 回答