問題がDrupal 7以下のものであることを願っています。Drupal 8の場合、解決策はほぼ不可能です。また、将来のDrupalバージョンでは、Drupal 9の現在の計画に従って、マルチサイトオプション自体は使用できなくなります。つまり、Drupalのデフォルトオプションを使用してユーザーロールを共有することは明らかに不可能です。
Drupal 7以下では、マルチサイト設定で、コンテンツごとに異なるデータベースを使用するように各サイトを構成し、ユーザー、ロール、セッションなどのためだけに(同じデータベースから)同じテーブルを共有することが非常に簡単に可能です。ユーザーを共有するのではなく、役割のみを共有したい場合でも、それは可能です。このため、サイトAとサイトBのsettings.phpは次のようにする必要があります。
サイトAのsettings.php:
/*
* Database Settings for 'Site A'
*/
$databases['default']['default'] = array (
'database' => 'site_a_db_name', // Specify Site A's main database name
'username' => 'site_a_db_username',
'password' => 'site_a_db_password',
'prefix' => array(
'default' => 'site_a_prefix_', // Prefix for all tables in Site A's main database (specified above), other than for the tables specified below
'role' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'role' table
'users' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'users' table
'authmap' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'authmap' table
'sessions' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'sessions' table
'profile_fields' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'profile_fields' table
'profile_values' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'profile_values' table
),
'host' => 'localhost',
'port' => '3306',
'driver' => 'mysql',
'collation' => 'utf8mb4_general_ci',
);
サイトBのsettings.php:
/*
* Database Settings for 'Site B'
*/
$databases['default']['default'] = array (
'database' => 'site_b_db_name', // Specify Site B's main database name
'username' => 'site_b_db_username',
'password' => 'site_b_db_password',
'prefix' => array(
'default' => 'site_b_prefix_', // Prefix for all tables in Site B's main database (specified above), other than for the tables specified below
'role' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'role' table
'users' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'users' table
'authmap' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'authmap' table
'sessions' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'sessions' table
'profile_fields' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'profile_fields' table
'profile_values' => 'shared_db_name.shared_prefix_', // Shared database name and prefix for the 'profile_values' table
),
'host' => 'localhost',
'port' => '3306',
'driver' => 'mysql',
'collation' => 'utf8mb4_general_ci',
);
上記のコードに示すように、「prefix」配列の下で、サイトで使用される異なるテーブルごとに個別のデータベースとプレフィックスを指定できます。'prefix'配列で排他的に指定されているテーブル以外のすべてのテーブルでは、 'default'として指定されたプレフィックスが使用されます。
Drupal 8では、ユーザー/ロール/セッションの共有はDrupal 7ほど簡単ではありません。Drupal8では、ユーザーロールを含む多くの情報が共有テーブルの一部であるためです(この共有テーブルは多くの異なる情報を格納するためのものです)変数値、および役割はその一部にすぎません)。