ACL

ACL(Access Control Lists)は、他のモジュールがユーザーリストを作成し、ノードへのアクセス権限を付与するためのAPIを提供する基盤モジュールです。

acl
6,992 sites
37
drupal.org
Drupal 8 Drupal 9 Drupal 10 Drupal 11 Drupal 12

インストール

Drupal 12, 11, 10 v2.0.1
composer require 'drupal/acl:^2.0'
Drupal 9, 8 v8.x-1.1
composer require 'drupal/acl:8.x-1.1'

概要

ACLモジュールは、Drupalのノードアクセスシステムと統合するアクセス制御リスト(ACL)APIを提供します。このモジュール自体には管理画面やユーザーインターフェースがなく、他のモジュール(Content Access、Forum Access等)から利用されることを目的としています。

ACLは、特定のユーザーグループに対してノード単位で閲覧・編集・削除権限を付与する仕組みを提供します。クライアントモジュールは、ACLを作成し、ユーザーを追加し、そのACLをノードに関連付けることで、きめ細かなアクセス制御を実現できます。

データベース構造として3つのテーブル(acl、acl_user、acl_node)を使用し、ACLの定義、ユーザーとの関連付け、ノードへの権限付与をそれぞれ管理します。Drupal 6/7からの移行にも対応しており、Migrate APIプラグインを提供しています。

Features

  • アクセス制御リスト(ACL)の作成・削除・管理機能を提供
  • ACLへのユーザー追加・削除機能(個別および一括)
  • ノードへのACL関連付けと権限(閲覧・更新・削除)の設定
  • サブクエリを使用した複数ノードへの一括ACL適用
  • Drupalのnode_access_records/node_grantsシステムとの統合
  • 他のフォームに埋め込み可能なACL編集フォームの提供
  • Drupal 6/7からのマイグレーションサポート
  • ACL状態の照会API(ユーザー有無確認、ID検索等)

Use Cases

プライベートコンテンツの作成

特定のユーザーグループのみがアクセスできるプライベートコンテンツを作成します。Content Accessモジュールと組み合わせて使用し、ノード編集画面から「アクセス制御」タブでユーザーを指定できます。指定されたユーザーのみがコンテンツを閲覧・編集できるようになります。

プライベートフォーラムの構築

Forum Accessモジュールと組み合わせて、特定のユーザーグループのみがアクセスできるプライベートフォーラムカテゴリを作成できます。メンバーシップベースのコミュニティサイトや、社内イントラネットのフォーラムに適しています。

カスタムアクセス制御モジュールの開発

独自のアクセス制御ロジックを実装するモジュールを開発する際の基盤として使用します。acl_create_acl()でACLを作成し、acl_add_user()でユーザーを追加、acl_node_add_acl()でノードにアクセス権限を設定します。hook_enabled()を実装してACLを有効化し、必要に応じてhook_acl_explain()でデバッグ情報を提供します。

Drupal 6/7サイトからの移行

Drupal 6または7で運用していたACLベースのアクセス制御をDrupal 10+に移行する場合、提供されているマイグレーションプラグイン(d6_d7_acl、d6_d7_acl_user、d6_d7_acl_node)を使用して、既存のACL設定を自動的に移行できます。

チーム別コンテンツアクセス管理

複数のチームやプロジェクトグループがあり、それぞれが独自のコンテンツにのみアクセスできるようにする場合に使用します。各チーム用のACLを作成し、チームメンバーを追加、関連するノードにACLを適用することで、組織構造に基づいたアクセス制御を実現できます。

Tips

  • ACLモジュール単体では何も機能しません。必ずContent AccessやForum Access等のクライアントモジュールと組み合わせて使用してください
  • devel_node_accessモジュールと組み合わせると、ノードのアクセス権限を詳細にデバッグできます
  • ACLのfigureフィールドは数値識別子として使用でき、nameフィールドと組み合わせて柔軟なACL管理が可能です
  • acl_edit_form()を使用すると、自作フォームにACL編集機能を簡単に埋め込むことができます
  • 大量のノードにACLを適用する場合は、acl_node_add_acl()を繰り返し呼ぶよりもacl_add_nodes()でサブクエリを使用する方が効率的です

Technical Details

Hooks 2
hook_acl_explain

ACLのgrantレコードの意味を説明するテキストを返す。devel_node_accessモジュールと連携してアクセス権限のデバッグに使用される

hook_enabled

クライアントモジュールが有効であることをACLに通知する。ACLはこのフックがTRUEを返さない限り、そのモジュールのnode_accessレコードを返さない

Troubleshooting 4
インストール後に「ノードアクセス権限の再構築が必要です」と表示される

これは正常な動作です。ACLモジュールはnode_accessシステムを使用するため、/admin/reports/status/rebuildでノードアクセス権限を再構築してください。

ACLを設定してもアクセス制御が機能しない

クライアントモジュール(Content Access等)でhook_enabled()がTRUEを返しているか確認してください。ACLモジュール単体ではアクセス制御を実行せず、クライアントモジュールが有効であることを確認する必要があります。

ACLにユーザーを追加したが権限が反映されない

ACLへのユーザー追加後、関連するノードのアクセス権限を再構築する必要がある場合があります。node_access_rebuild()を実行するか、該当ノードを再保存してください。

ACLエラーが発生するが原因が不明

ACLモジュール自体がエラーの原因である可能性は低いです。クライアントモジュールのACL APIの使用方法を確認してください。ACLはAPIを提供するだけで、正しい使用方法はクライアントモジュールの責任です。

Security Notes 3
  • ACLモジュールはDrupal.orgのセキュリティカバレッジ対象です
  • ACLで設定したアクセス制御はDrupalのnode_accessシステムを通じて適用され、標準的なノードアクセスチェックで機能します
  • クライアントモジュールがhook_enabled()でFALSEを返すと、そのモジュールのACLレコードは無視されます。これはセキュリティ機能ではなく、無効化されたモジュールのACLが誤って適用されることを防ぐためです