Rails动态授权接口

时间:2012-03-01 15:10:10

标签: ruby-on-rails dynamic authorization

我刚开始使用Ruby on Rails进行开发,我正在寻找一个动态授权插件,使管理员能够将角色和角色的权限与用户相关联。

我在stackoverflow和一些论坛上发现了一些帖子,还有一些针对这个主题的railscasts.org播客,但他们都引用了acl9,declarative_authorization,Aegis,restful acl甚至是Authlogic,这不是授权,而是认证插入。其他的不提供所需的功能。

有人可以告诉我是否可以使用ruby on rails设置Web界面来管理用户角色?

所以现在我使用以下迁移迁移了我的数据库。

class AddRolesAndRightsTables < ActiveRecord::Migration
  def self.up
    create_table :roles_users do |t|
      t.integer :role_id
      t.integer :user_id 
    end

    create_table :roles do |t|
      t.string :name
    end

    create_table :rights_roles do |t|
      t.integer :right_id 
      t.integer :role_id
    end

    create_table :rights do |t|
      t.string :name
      t.string :controller
      t.string :action
    end
  end

  def self.down
    drop_table :roles_users
    drop_table :roles
    drop_table :rights_roles
    drop_table :rights
  end
end

除了一些视图和控制器操作之外,我还向ApplicationController添加了以下操作。

def check_authorization
  user = User.find(session[:user])
  unless user.roles.detect do |role|
    role.rights.select do |right|
      right.action == action_name && right.controller == self.class.controller_path
    end
  end

  redirect_back_or user
  flash[:notice] = "You are not authorized to view the page you requested."
  return false
end

运行Right.synchronize_with_controllers(参见Wolfman-Blog中的Blog-Post),我收到以下错误。

syntax error, unexpected $end, expecting kEND (line 17 in application_controller)

1 个答案:

答案 0 :(得分:2)

我会建议Ryan Bate的cancan。我花了一段时间才了解它是如何工作的,但是值得努力学习。

在我的完整程序中,我能够为所有控制器使用简单的load_and_authorize_resource,并在此处添加额外的位以完成它。

希望authenticationauthorzation之间没有混淆。如果您想快速建立管理界面,我建议 Active Admin

否则,使用cancannamespace管理员控制器可能更灵活=)

<强>更新

要获得基于cancan的基于角色的简单权限接口,您可以在其中创建角色并为其分配权限。

User belongs_to Role

Role has_many Users
Role has_and_belongs_to_many Permissions

Permissions has_and_belongs_to_many Roles

每个Permission记录定义一个模型以及您可以对其执行的RESTful操作。

如果您只需要定义一个角色,但其权限是静态的,我建议您可以将它们写入cancan中的Ability.rb,然后取消Permission模型。

抱歉,我无法提供确切的代码,因为我没有必要实现基于权限的模型。

Cancan Railscast http://railscasts.com/episodes/192-authorization-with-cancan

另一个很棒的康康教程 http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/

数据库中的能力:Cancan https://github.com/ryanb/cancan/wiki/Abilities-in-Database