Dương Văn Bốn Dương Văn Bốn
9.9 10 592648 Designed by

Thứ Hai, 14 tháng 5, 2012

Phân quyền trong drupal , phân quyền drupal 6, phân quyền drupal 7, phân quyền drupal 8


Cách phân quyền trong drupal, vào đâu để phân quyền trong drupal, phân quyền cho người sử dụng trong drupal, phân quyền cho quản trị trong drupal như thế nào ?
I. Yêu cầu và hiện trạng thực tế của Drupal:
1. Yêu cầu:
Giả sử cần xây dựng website có các nhóm user quản trị đại diện các bộ phận khác nhau, mỗi bộ phận đó có nhiều user và có quyền khác nhau, cụ thể như sau:

- Xây dựng hệ thống gồm có các nhóm user (role) tương ứng với từng bộ phận.
- Mỗi nhóm user có các quyền khác nhau.
- Mỗi user có thể có một hoặc nhiều roles.
- User sẽ kế thừa quyền từ role mà họ gán.
- Mỗi user quản trị có một level, level được chia từ thấp đến cao, level 1 là thấp nhất
- Nếu 2 user có cùng một role thì user có level cao hơn thì sẽ có quyền lớn hơn.
- User quản trị chỉ được tạo user mới hoặc phân quyền cho user có level thấp hơn trong giới quyền của role mà họ được cấp.

2. Hiện trạng:
Drupal quản lý và phân quyền quản trị trên website dựa vào role. Mặc định ban đầu có 2 role, Authemticate và Anynomous. Người quản trị website có thể tạo thêm nhiều role mới. Mỗi role sẽ được phân quyền truy khác nhau để truy cập website tùy thuộc vào sự phân quyền của người quản trị. User thuộc role nào sẽ kế thừa quyền truy cập của role đó. Một user có thể thuộc nhiều role do đó có thể sử dụng tất cả quyền từ những role mà họ kế thừa.



Hình 1: Phân quyền user được xây dựng dựa trên role

2.1. Ưu điểm:

- Đơn giản: Việc phân quyền theo role đơn giản do không phải phân quyền cho từng user. Tránh được sự nhầm lẫn và rắc rối khi muốn phân cùng một quyền cho nhiều user
- Linh hoạt: Người quản trị có thể tạo thêm nhiều role được phân quyền khác nhau.
- An toàn: User chỉ có quyền trong giới của role do đó không thể sử dụng được các quyền không thuộc role đó.
2.2. Khuyết điểm:
Khuyết điểm của phân quyền theo Role là không phân biệt được cấp bậc của User. Tất cả User thuộc cùng một Role sẽ có cấp bậc ngang nhau điều này gây khó khăn trong việc phân quyền quản trị user.

Ví dụ:
Khi một user có quyền thấp hơn (nằm trong một roles có quyền thấp hơn) nhưng được cấp quyền quản lý user (user module) thì user đó có quyền thay đổi được những user có quyền cao hơn mình (user nằm trong roles có quyền cao hơn) và tạo ra những roles có quyền cao hơn.

II. Kiểm tra:
1. Drupal 5.x:
Phiên bản kiểm tra: Drupal 5.16
Có hai user:

1. admin: user mặt định khi cài drupal lần đầu, user này có quyền cao nhất, không nằm trong roles nào hết.
2. test: user này tạo ra có quyền nằm trong roles test, role này có quyền như hình phía dưới.

Hình 2: Role test được tạo mới



Hình 3: Cấp quyền cho role test





Hình 4 : User trên hệ thống

Tiến hành kiểm tra: Thoát khỏi user admin, và đăng nhập vào user test
Khi đăng nhập vào user test ta có màn hình sau:

Hình 5: Màn hình user test sau khi đăng nhập

User test này có thể:

1. Tạo role mới
2. Thay đổi bất cứ user nào (kể cả admin)
3. Thay đổi quyền của từng role


Hình 6: User test có thể thêm bất cứ một role nào mới với quyền mới


Hình 7: User test có thể thay đổi bất kì thông tin nào của user nào trong hệ thống


Hình 8: User test có thể thay đổi bất kì quyền trên bất cứ role nào.

III. Giải pháp
Định nghĩa thêm thuộc tính level cho user
Đối với user quản trị có quyền quản lý thành viên (tạo, xóa, sửa, phân quyền) thì chỉ được tạo user mới có level thấp hơn và phân quyền trong giới quyền của user đó có. Chỉ cho phép user quản trị chỉ quản lý thành viên trong role mà họ được phân quyền quản lý.



Hình 9: Phân quyền user được xây dựng dựa trên role và level

Tái bút:
Trong phiên bản Drupal 6.x thì việc phân quyền cho user đối với một "path" nào đó được kiểm tra qua module menu . Nghĩa là module menu có nhiệm vụ kiểm tra user nào đó có quyền truy cập đối với một "path" nào đó không rồi tới kiểm tra quyền trên role của user đó. Có nghĩa là với một user nào đó có quyền trên role, user, và permission thì user đó vẫn nắm quyền được hệ thống, và thay đổi được user admin của hệ thống.

Xin hỏi ai có giải pháp nào khác để giải quyết vấn đề trên?

Bài viết này thực hiện bởi nhóm phát triển Drupal thuộc công ty ASALEO.

Không có nhận xét nào:

Đăng nhận xét