
WordPress là một hệ thống quản lý nội dung (CMS) mạnh mẽ với hệ thống phân quyền giúp quản lý người dùng một cách linh hoạt. Hệ thống này sử dụng các role (vai trò) để xác định quyền hạn của mỗi người dùng, đảm bảo rằng họ chỉ có thể thực hiện những hành động được phép. Dưới đây là bài viết chi tiết về các role của user trong WordPress:
I. Tổng Quan Về User Role#
1. Role là gì?#
- Role trong WordPress là một tập hợp các capabilities (quyền hạn) định nghĩa những gì người dùng có thể và không thể làm trên trang web.
- Mỗi người dùng khi được tạo trong WordPress đều được gán một vai trò, quyết định phạm vi quyền hạn của họ.
2. Các Role Mặc Định#
WordPress cung cấp sẵn 5 vai trò người dùng mặc định:- Administrator (Quản trị viên)
- Editor (Biên tập viên)
- Author (Tác giả)
- Contributor (Cộng tác viên)
- Subscriber (Người đăng ký)
II. Chi Tiết Từng Vai Trò#
1. Administrator (Quản trị viên)#
- Mô tả: Là người có quyền cao nhất trên website. Thường dành cho người quản trị chính.
- Quyền hạn chính:
- Quản lý toàn bộ nội dung và cấu hình của website.
- Cài đặt, kích hoạt, hoặc xóa plugin và theme.
- Quản lý người dùng: thêm, sửa, xóa bất kỳ người dùng nào, kể cả Administrator khác.
- Thay đổi cài đặt trang web.
- Xóa mọi nội dung, kể cả nội dung của người dùng khác.
- Sử dụng khi nào:
- Chỉ nên gán role này cho chủ sở hữu trang web hoặc quản trị viên chính.
2. Editor (Biên tập viên)#
- Mô tả: Người chịu trách nhiệm quản lý nội dung trên trang web.
- Quyền hạn chính:
- Chỉnh sửa, xuất bản hoặc xóa mọi bài viết (kể cả bài viết của người khác).
- Quản lý danh mục, thẻ, và media.
- Không có quyền cài đặt plugin, theme, hoặc thay đổi cài đặt trang web.
- Sử dụng khi nào:
- Thích hợp cho các trưởng nhóm nội dung hoặc quản lý biên tập viên.
3. Author (Tác giả)#
- Mô tả: Người có quyền tạo nội dung riêng, nhưng không được can thiệp vào nội dung của người khác.
- Quyền hạn chính:
- Viết, chỉnh sửa, xuất bản, hoặc xóa bài viết của chính mình.
- Tải lên tệp media và quản lý các tệp do mình tải lên.
- Không được truy cập bài viết của người khác.
- Sử dụng khi nào:
- Thích hợp cho những người tạo nội dung thường xuyên nhưng không cần quản lý tổng thể nội dung.
4. Contributor (Cộng tác viên)#
- Mô tả: Người có quyền tạo bài viết, nhưng cần được phê duyệt trước khi xuất bản.
- Quyền hạn chính:
- Tạo và chỉnh sửa bài viết của chính mình.
- Gửi bài viết để biên tập viên hoặc quản trị viên duyệt và xuất bản.
- Không có quyền tải lên media.
- Sử dụng khi nào:
- Phù hợp với các cộng tác viên không thường xuyên, cần kiểm soát chất lượng nội dung trước khi đăng.
5. Subscriber (Người đăng ký)#
- Mô tả: Người dùng có quyền hạn thấp nhất, chủ yếu để quản lý thông tin cá nhân và xem nội dung.
- Quyền hạn chính:
- Đăng nhập và quản lý hồ sơ cá nhân (như thay đổi mật khẩu, tên hiển thị).
- Không có quyền chỉnh sửa, viết bài, hoặc tải lên media.
- Sử dụng khi nào:
- Phù hợp cho trang web cung cấp nội dung chỉ dành cho thành viên.
6. Super Admin (Siêu quản trị viên)#
- Chỉ có trong WordPress Multisite.
- Khả năng chính:
- Quản lý toàn bộ mạng lưới trang web.
- Quản lý cài đặt mạng (thêm, xóa, chỉnh sửa các trang con trong hệ thống Multisite).
- Quản lý plugin và theme trên toàn mạng.
III. Tạo Role Tùy Chỉnh#
Ngoài các role mặc định, bạn có thể tạo các vai trò tùy chỉnh nếu cần. Điều này được thực hiện bằng cách sử dụng hook WordPress hoặc các plugin hỗ trợ.1. Tạo Role Tùy Chỉnh Bằng Code#
Sử dụng hàmadd_role()
để tạo role mới:
add_role(
'custom_role',
'Custom Role', // Tên hiển thị
[
'read' => true, // Có quyền đọc nội dung
'edit_posts' => true, // Có quyền chỉnh sửa bài viết
'delete_posts' => false, // Không được xóa bài viết
]
);
2. Xóa Role#
Nếu cần xóa role tùy chỉnh, sử dụng hàmremove_role()
:
remove_role('custom_role');
IV. Phân Quyền (Capabilities)#
Mỗi role được gán một danh sách quyền hạn cụ thể. Một số quyền hạn phổ biến trong WordPress:- read: Quyền đọc nội dung.
- edit_posts: Quyền chỉnh sửa bài viết.
- publish_posts: Quyền xuất bản bài viết.
- delete_posts: Quyền xóa bài viết.
- upload_files: Quyền tải lên tệp media.
- manage_options: Quyền quản lý cài đặt trang web.
$role = get_role('editor');
$role->add_cap('edit_theme_options'); // Thêm quyền
$role->remove_cap('delete_posts'); // Xóa quyền
V. Plugin Quản Lý Role#
Để đơn giản hóa việc quản lý role và quyền hạn, bạn có thể sử dụng các plugin như:- User Role Editor: Tùy chỉnh role và quyền hạn dễ dàng.
- Members: Quản lý thành viên và role nâng cao.
- Advanced Access Manager: Kiểm soát truy cập chi tiết.
VI. Cách chỉnh sửa quyền của vai trò#
- Bạn có thể sử dụng plugin như User Role Editor để tùy chỉnh quyền cho từng vai trò, hoặc sử dụng code tùy chỉnh:
Ví dụ thêm khả năng cho vai trò:
function add_custom_capability_to_editor() {
$role = get_role('editor');
$role->add_cap('manage_options'); // Thêm quyền quản lý cài đặt
}
add_action('init', 'add_custom_capability_to_editor');
Ví dụ xóa khả năng:
function remove_capability_from_author() {
$role = get_role('author');
$role->remove_cap('delete_published_posts'); // Xóa quyền xóa bài viết đã xuất bản
}
add_action('init', 'remove_capability_from_author');
1. Khi nào cần tạo vai trò mới?#
Nếu các vai trò mặc định không đủ đáp ứng nhu cầu, bạn có thể tạo vai trò mới bằng cách sử dụngadd_role
:
Ví dụ tạo vai trò mới:
function create_custom_role() {
add_role(
'custom_role',
'Custom Role', // Tên vai trò
[
'read' => true, // Cho phép đọc nội dung
'edit_posts' => true, // Cho phép chỉnh sửa bài viết của mình
'delete_posts' => false, // Không được xóa bài viết
]
);
}
add_action('init', 'create_custom_role');
2. Liên quan đến bảo mật#
- Hạn chế cấp quyền Administrator cho nhiều người.
- Xóa vai trò hoặc quyền không cần thiết nếu không dùng đến.
- Đảm bảo các plugin không tự ý thay đổi quyền mà không có sự kiểm soát.
VII. Kết Luận#
Hệ thống phân quyền của WordPress giúp quản lý người dùng hiệu quả, đảm bảo an toàn và linh hoạt. Việc hiểu rõ vai trò và quyền hạn của từng user role là cần thiết để tối ưu hóa trang web và tránh xung đột không đáng có. Nếu bạn có nhu cầu tùy chỉnh phức tạp hơn, việc sử dụng code hoặc các plugin hỗ trợ sẽ là giải pháp hữu ích. Hãy chọn và gán vai trò phù hợp để duy trì sự kiểm soát chặt chẽ trên website của bạn!VIII. Ví dụ: Tạo thêm 1 quyền mới, và chỉ có quyền này mới có quyền dùng hàm handle_file_action()
#
Để tạo một quyền mới và giới hạn quyền sử dụng handle_file_action()
chỉ cho người dùng có quyền này, bạn có thể thực hiện các bước sau:
1. Tạo quyền mới#
Chúng ta sẽ thêm quyền mới (capability) khi kích hoạt plugin hoặc qua hàminit
.
Code để thêm quyền mới:
function add_custom_file_manager_capability() {
// Thêm quyền mới vào Administrator
$role = get_role('administrator');
if ($role) {
$role->add_cap('use_file_manager'); // Quyền mới: 'use_file_manager'
}
}
add_action('init', 'add_custom_file_manager_capability');
2. Giới hạn handle_file_action()
#
Trong hàm handle_file_action()
, kiểm tra người dùng hiện tại có quyền use_file_manager
hay không trước khi thực thi:
Cập nhật handle_file_action()
:
function handle_file_action() {
// Kiểm tra quyền của người dùng
if (!current_user_can('use_file_manager')) {
wp_die('Bạn không có quyền truy cập tính năng này.', '403 Forbidden', ['response' => 403]);
}
$html = '';
$file = '';
$action = '';
// Các logic xử lý của bạn ở đây...
if (isset($_POST['startTemplateUrl']) && !empty($_POST['startTemplateUrl'])) {
$start_template_url = sanitize_file_name_custom($_POST['startTemplateUrl']);
$html = '';
if ($start_template_url) {
$html = file_get_contents($start_template_url);
}
} elseif (isset($_POST['html'])) {
$html = substr($_POST['html'], 0, MAX_FILE_LIMIT);
if (!ALLOW_PHP && preg_match('@<\?php|<\? |<\?=|<\s*script\s*language\s*=\s*"\s*php\s*"\s*>@', $html)) {
show_error('PHP không được phép!');
}
}
if (isset($_POST['file'])) {
$file = sanitize_file_name_custom($_POST['file']);
}
if (isset($_GET['action'])) {
$action = htmlspecialchars(strip_tags($_GET['action']));
}
// Logic xử lý action ở đây
switch ($action) {
case 'rename':
// ...
break;
case 'delete':
// ...
break;
default:
show_error("Hành động không hợp lệ: '$action'");
}
wp_die();
}
3. Tạo vai trò mới (tùy chọn)#
Nếu bạn muốn tạo một vai trò hoàn toàn mới (ngoài Administrator), ví dụFile Manager
, và chỉ người dùng thuộc vai trò này có quyền sử dụng handle_file_action()
:
Thêm vai trò mới:
function create_file_manager_role() {
add_role(
'file_manager',
'File Manager', // Tên vai trò
[
'read' => true, // Cho phép đọc
'use_file_manager' => true, // Quyền dùng file manager
]
);
}
add_action('init', 'create_file_manager_role');
4. Gỡ bỏ quyền hoặc vai trò (nếu cần)#
Nếu bạn muốn gỡ quyền hoặc vai trò:Gỡ quyền khỏi Administrator:
function remove_custom_file_manager_capability() {
$role = get_role('administrator');
if ($role) {
$role->remove_cap('use_file_manager');
}
}
add_action('init', 'remove_custom_file_manager_capability');
Xóa vai trò:
function remove_file_manager_role() {
remove_role('file_manager');
}
add_action('init', 'remove_file_manager_role');
5. Kết hợp với AJAX (nếu sử dụng)#
Khi bạn sử dụng AJAX, WordPress tự động kiểm tra quyền thông quacurrent_user_can()
. Đảm bảo thêm die()
hoặc wp_die()
nếu người dùng không có quyền.
Ví dụ:
add_action('wp_ajax_file_manager', 'handle_file_action'); // Chỉ người dùng đã đăng nhập
Kết quả#
- Quyền mới:
use_file_manager
được tạo. - Hạn chế quyền: Chỉ người dùng có quyền này mới truy cập được
handle_file_action()
. - Vai trò tùy chọn: Vai trò mới
File Manager
có thể được tạo và phân quyền rõ ràng.
Nội dung bài viết
- I. Tổng Quan Về User Role
- 1. Role là gì?
- 2. Các Role Mặc Định
- II. Chi Tiết Từng Vai Trò
- 1. Administrator (Quản trị viên)
- 2. Editor (Biên tập viên)
- 3. Author (Tác giả)
- 4. Contributor (Cộng tác viên)
- 5. Subscriber (Người đăng ký)
- 6. Super Admin (Siêu quản trị viên)
- III. Tạo Role Tùy Chỉnh
- 1. Tạo Role Tùy Chỉnh Bằng Code
- 2. Xóa Role
- IV. Phân Quyền (Capabilities)
- V. Plugin Quản Lý Role
- VI. Cách chỉnh sửa quyền của vai trò
- 1. Khi nào cần tạo vai trò mới?
- 2. Liên quan đến bảo mật
- VII. Kết Luận
- VIII. Ví dụ: Tạo thêm 1 quyền mới, và chỉ có quyền này mới có quyền dùng hàm
handle_file_action()
- 1. Tạo quyền mới
- 2. Giới hạn
handle_file_action()
- 3. Tạo vai trò mới (tùy chọn)
- 4. Gỡ bỏ quyền hoặc vai trò (nếu cần)
- 5. Kết hợp với AJAX (nếu sử dụng)
- Kết quả