我正在使用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
这个想法是解析文件并为角色设置变量。您是否知道如何实现这种帮助以及如何逐块解析文件?如果你有另一个想法来创建一个简单的配置文件,请告诉我!
答案 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可以很好地配合设计,提供整体认证/授权策略。