2

可能是一个愚蠢的问题,但我非常接近实现 acl9。只是有点不确定角色表中的数据应该是什么样子:

id | name  | authorizable_type | authorizable_id | created_at | updated_at 
---+-------+-------------------+-----------------+------------+------------ 

我假设名称将是“管理员”等。

我不确定authorizable_typeauthorizable_id指的是什么。

4

2 回答 2

1

authorizable_type和映射的主要目的是authorizable_id`authorizable_object'。如果您在应用程序中创建角色表,希望这通常会有所帮助,您的迁移应该如下所示:

class CreateRoles < ActiveRecord::Migration
  def self.up
    create_table :roles, :force => true do |t|
      t.string   :name
      t.string   :authorizable_type
      t.integer  :authorizable_id
      t.timestamps
    end
    add_index :roles, :name
    add_index :roles, [:authorizable_id, authorizable_type]
    add_index :roles, [:name, :authorizable_id, :authorizable_type], :unique => true
  end

  def self.down
    remove_index :roles, [:name, :authorizable_id, :authorizable_type]
    remove_index :roles, [:authorizable_id, :authorizable_type]
    remove_index :roles, :name
    drop_table :roles
  end
end
于 2012-12-20T03:10:28.383 回答
0

首先,acl9的 1.2 版附带了一个生成器,用于角色表所需的迁移(以及其他一些好东西),bin/rails g acl9:setup -h有关更多详细信息,请参阅。

其次,为了解释这些字段,Rails 有一个称为多态关联的功能(在此处阅读更多信息),它允许您将一个模型与任何其他模型相关联。acl9 使用此功能使您能够在您希望的任何其他模型上应用角色,在 acl9 术语中,我们将这些其他模型称为“对象”在此处阅读更多信息)。您需要做的就是acts_as_authorization_object在模型中包含调用,这样您就可以执行以下操作:

user.has_role! :admin, school

并且该用户具有该:admin角色school(并且仅针对该特定学校)。根据多态关联功能,authorizable_id将包含数据库中该学校的主键,authorizable_type并将包含类名"School"

于 2015-01-22T20:17:55.007 回答