Làm cách nào để đồng bộ hóa người dùng và vai trò của họ giữa các trang web?


7

Tôi đã thiết lập cài đặt Drupal nhiều trang web. Trang web chính là example.com và chúng tôi cũng có a.example.com và b.example.com.

Tôi sở hữu example.com và tôi thuê a.example.com cho Người A và b.example.com cho Người B. Họ trả tiền thuê trang web của họ bằng tính năng mua vai trò UberCart trên trang web của tôi. Tôi cần một cách để thiết lập trang web của mình để Người A và B có thể đăng nhập vào example.com và trả tiền thuê trang web của họ và cũng có thể tự động chuyển đổi vai trò nâng cấp lên a.example.com và b.example.com để sau một tháng nếu Ubercart hạ cấp vai trò của họ, tôi không phải truy cập và tự hủy bỏ chúng.

Những điều tôi đã thử:

  1. Bảng người dùng chung . Điều này không hoạt động vì tôi không muốn Người A có thể thấy những người đã đăng ký b.example.com và một trang web người dùng được chia sẻ có nghĩa là mọi người đều có thể thấy mọi thứ.

  2. Truy cập tên miền . Điều này hoạt động tốt nhưng thực sự rất run và tôi dự định chuyển lên z.example.com và trong tương lai, vì vậy trừ khi có cách để giữ mọi thứ tách biệt hơn tôi có thể, tôi không nghĩ vậy là khả thi. Ví dụ: nếu mỗi trang web có trang 'về chúng tôi' thì tôi sẽ thấy 26 trang "Giới thiệu" từ tài khoản uid = 1 của mình. Ngoài ra, tôi không thấy bất kỳ cách nào để tách mô-đun UberCart nhiều như tôi muốn. Ubercart Marketplace là một điều không nên bởi vì tôi không nhận bất kỳ khoản hoa hồng nào như nó được thiết kế để làm và UC_Domain chưa được nâng cấp lên drupal 7.

  3. Đồng bộ hóa tài khoản . Điều này có vẻ như gần nhất, nhưng plugin có vẻ bị hỏng, tôi gặp hàng tấn lỗi XML-RPC khi tôi dùng thử và nói chung nó không hoạt động như mô tả và dường như chỉ đồng bộ hóa tài khoản đầu tiên trước khi phá vỡ. Google tìm kiếm các lỗi không mang lại điều gì ngoài các cảnh báo rằng XMLRPC có khả năng gây nguy hiểm.

  4. Tiệm bánh . Điều này có vẻ tuyệt vời nhưng nó không chia sẻ vai trò trên các trang con không may. Tôi đã cố gắng thêm nó vào, nhưng trước khi tôi dành thời gian tôi muốn xem liệu có cách nào khác để tôi có thể đi về vấn đề này không

Nếu bất cứ ai cần làm rõ về bất cứ điều gì cho tôi biết, tôi thực sự muốn giải quyết vấn đề này và không thể tìm thấy bất cứ điều gì trực tuyến.


Cách dễ nhất để làm điều đó là bằng cách xuất các vai trò thông qua các tính năng. Tính năng
Mohammad AlQanneh

Câu trả lời:


1

Hy vọng câu hỏi dành cho Drupal 7 hoặc ít hơn. Nếu đó là cho Drupal 8, giải pháp gần như không thể. Và đối với các phiên bản Drupal trong tương lai, theo kế hoạch hiện tại cho Drupal 9, bản thân tùy chọn đa trang web sẽ không khả dụng, điều đó có nghĩa là chia sẻ vai trò người dùng bằng các tùy chọn mặc định của Drupal, rõ ràng là không thể.

Trong Drupal 7 hoặc thấp hơn, trong thiết lập nhiều trang web, rất dễ dàng có thể định cấu hình mỗi trang để sử dụng các cơ sở dữ liệu khác nhau cho nội dung của chúng và chia sẻ cùng một bảng (từ cùng một cơ sở dữ liệu) chỉ cho người dùng, vai trò, phiên, v.v. Nếu bạn không muốn chia sẻ người dùng, nhưng chỉ muốn chia sẻ vai trò, thậm chí điều đó là có thể. Đối với điều này, settings.php cho trang A và trang B phải như sau:

settings.php cho trang A:

/*
 * 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',
);

settings.php cho Trang web B:

/*
 * 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',
);

Như được hiển thị trong đoạn mã trên, dưới mảng 'tiền tố', chúng ta có thể chỉ định cơ sở dữ liệu và tiền tố riêng cho từng bảng khác nhau được sử dụng trong trang web. Khác với các bảng được chỉ định riêng trong mảng 'tiền tố', đối với tất cả các bảng khác, tiền tố được chỉ định là 'mặc định' sẽ được sử dụng.

Trong Drupal 8, chia sẻ người dùng / vai trò / phiên không dễ dàng như trong Drupal 7, bởi vì trong Drupal 8, nhiều thông tin, bao gồm cả vai trò người dùng, là một phần của bảng chia sẻ (bảng chia sẻ đó có nghĩa là lưu trữ nhiều loại khác nhau giá trị thay đổi và vai trò chỉ là một phần của điều đó).


0

Bạn có thể sử dụng cơ sở dữ liệu thứ cấp (hoặc một bảng cụ thể) cho tất cả các trang web của bạn nơi bạn quản lý vai trò người dùng của mỗi trang web. Sau đó, bạn sẽ cần phải:

  • Xác định một công việc định kỳ cho mỗi trang web (az) .example.com để tìm kiếm cơ sở dữ liệu và cập nhật vai trò của người dùng trên trang web
  • Cập nhật cơ sở dữ liệu khi mọi người mua trên example.com
  • Cron kích hoạt từ example.com sau khi giao dịch UberCart hoàn tất

Một cách khác để làm điều đó là hiển thị điểm cuối dịch vụ web POST (REST) ​​trên các trang web phụ sẽ kích hoạt chức năng cập nhật vai trò dựa trên dữ liệu được gửi. Sau đó, bạn gọi điểm cuối đó sau giao dịch UberCart.

Trong cả hai trường hợp, tôi giả sử có một cái móc bạn có thể sử dụng để thực hiện mọi việc sau khi giao dịch UberCart (hoặc có thể là một cái gì đó như Quy tắc).


0

Cách dễ nhất nếu bạn không muốn phát triển quá nhiều là thay đổi một chút về việc chia sẻ bảng:

https://www.drupal.org/node/22267

Nhưng nếu bạn chỉ muốn chia sẻ vai trò, hãy nhìn vào bảng vai trò.

Đây là ví dụ bạn có thể sử dụng:

$db_prefix = array(
    "default" => "slave1_", // the prefix for tables that are not shared.
    "role" => "master_",
); 

0

Tạo một cơ sở dữ liệu bổ sung. Có thể là một cá thể drupal riêng hoặc một khung php như yii, nơi bạn có thể tự mô hình hóa cơ sở dữ liệu. Có bạn quản lý dữ liệu tài khoản. Từ đó bạn đồng bộ hóa các vai trò thông qua một cronjob (ví dụ như một cuộc gọi REST). Sau khi bạn đã tải dữ liệu thông tin tài khoản, bạn sử dụng hai hàm API Drupal này để cập nhật thông tin đăng nhập tài khoản:

Cách tiếp cận này sẽ thực hiện công việc, nếu bạn không chỉ tìm kiếm một mô-đun hoàn thành, mà thực hiện công việc cho bạn. Sau đó, bạn có được một lập trình viên tốt hơn, người giúp bạn ra ngoài.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.