Roles và Capabilities trong WordPress

Cập nhật lần cuối vào

Roles và Capabilities là 2 khái niệm rất quan trọng đối với WordPress, bất kỳ một công việc nào bạn làm đều phải trải qua giai đoạn kiểm tra xem quyền hạn của người dùng hiện tại có được phép hay không? Bài viết này mình không giới thiệu nhiều vì trên trang chủ của WordPress đã có bài hướng dẫn khá chi tiết rồi. Ở đây mình chỉ muốn đăng bài viết để mọi người tham khảo và ghi nhớ khi lập trình WordPress.

Roles và Capabilities trong WordPress

Bất kỳ 1 hệ thống website có quản lý tài khoản nào cũng có chức năng phân quyền cho người dùng. Trên mỗi trang web thì sẽ có nhiều người dùng, mỗi người dùng sẽ thuộc về 1 hoặc nhiều nhóm người dùng, và mỗi 1 nhóm người dùng thì có quyền hạn nhất định trên website. Trong WordPress thì bạn sẽ đụng tới 2 khái niệm đó là Roles và Capabilities, trong đó Roles là để chỉ nhóm người dùng và Capabilities là để chỉ các quyền hạn được thiết lập cho nhóm người dùng hoặc 1 tài khoản nào đấy.

WP_Roles Object
(
    [roles] => Array
        (
            [administrator] => Array
                (
                    [name] => Administrator
                    [capabilities] => Array
                        (
                            [switch_themes] => 1
                            [edit_themes] => 1
                            [activate_plugins] => 1
                            [edit_plugins] => 1
                            [edit_users] => 1
                            [edit_files] => 1
                            [manage_options] => 1
                            [moderate_comments] => 1
                            [manage_categories] => 1
                            [manage_links] => 1
                            [upload_files] => 1
                            [import] => 1
                            [unfiltered_html] => 1
                            [edit_posts] => 1
                            [edit_others_posts] => 1
                            [edit_published_posts] => 1
                            [publish_posts] => 1
                            [edit_pages] => 1
                            [read] => 1
                            [level_10] => 1
                            [level_9] => 1
                            [level_8] => 1
                            [level_7] => 1
                            [level_6] => 1
                            [level_5] => 1
                            [level_4] => 1
                            [level_3] => 1
                            [level_2] => 1
                            [level_1] => 1
                            [level_0] => 1
                            [edit_others_pages] => 1
                            [edit_published_pages] => 1
                            [publish_pages] => 1
                            [delete_pages] => 1
                            [delete_others_pages] => 1
                            [delete_published_pages] => 1
                            [delete_posts] => 1
                            [delete_others_posts] => 1
                            [delete_published_posts] => 1
                            [delete_private_posts] => 1
                            [edit_private_posts] => 1
                            [read_private_posts] => 1
                            [delete_private_pages] => 1
                            [edit_private_pages] => 1
                            [read_private_pages] => 1
                            [delete_users] => 1
                            [create_users] => 1
                            [unfiltered_upload] => 1
                            [edit_dashboard] => 1
                            [update_plugins] => 1
                            [delete_plugins] => 1
                            [install_plugins] => 1
                            [update_themes] => 1
                            [install_themes] => 1
                            [update_core] => 1
                            [list_users] => 1
                            [remove_users] => 1
                            [add_users] => 1
                            [promote_users] => 1
                            [edit_theme_options] => 1
                            [delete_themes] => 1
                            [export] => 1
                        )

                )

            [editor] => Array
                (
                    [name] => Editor
                    [capabilities] => Array
                        (
                            [moderate_comments] => 1
                            [manage_categories] => 1
                            [manage_links] => 1
                            [upload_files] => 1
                            [unfiltered_html] => 1
                            [edit_posts] => 1
                            [edit_others_posts] => 1
                            [edit_published_posts] => 1
                            [publish_posts] => 1
                            [edit_pages] => 1
                            [read] => 1
                            [level_7] => 1
                            [level_6] => 1
                            [level_5] => 1
                            [level_4] => 1
                            [level_3] => 1
                            [level_2] => 1
                            [level_1] => 1
                            [level_0] => 1
                            [edit_others_pages] => 1
                            [edit_published_pages] => 1
                            [publish_pages] => 1
                            [delete_pages] => 1
                            [delete_others_pages] => 1
                            [delete_published_pages] => 1
                            [delete_posts] => 1
                            [delete_others_posts] => 1
                            [delete_published_posts] => 1
                            [delete_private_posts] => 1
                            [edit_private_posts] => 1
                            [read_private_posts] => 1
                            [delete_private_pages] => 1
                            [edit_private_pages] => 1
                            [read_private_pages] => 1
                        )

                )

            [author] => Array
                (
                    [name] => Author
                    [capabilities] => Array
                        (
                            [upload_files] => 1
                            [edit_posts] => 1
                            [edit_published_posts] => 1
                            [publish_posts] => 1
                            [read] => 1
                            [level_2] => 1
                            [level_1] => 1
                            [level_0] => 1
                            [delete_posts] => 1
                            [delete_published_posts] => 1
                        )

                )

            [contributor] => Array
                (
                    [name] => Contributor
                    [capabilities] => Array
                        (
                            [edit_posts] => 1
                            [read] => 1
                            [level_1] => 1
                            [level_0] => 1
                            [delete_posts] => 1
                        )

                )

            [subscriber] => Array
                (
                    [name] => Subscriber
                    [capabilities] => Array
                        (
                            [read] => 1
                            [level_0] => 1
                        )

                )

        )

    [role_objects] => Array
        (
            [administrator] => WP_Role Object
                (
                    [name] => administrator
                    [capabilities] => Array
                        (
                            [switch_themes] => 1
                            [edit_themes] => 1
                            [activate_plugins] => 1
                            [edit_plugins] => 1
                            [edit_users] => 1
                            [edit_files] => 1
                            [manage_options] => 1
                            [moderate_comments] => 1
                            [manage_categories] => 1
                            [manage_links] => 1
                            [upload_files] => 1
                            [import] => 1
                            [unfiltered_html] => 1
                            [edit_posts] => 1
                            [edit_others_posts] => 1
                            [edit_published_posts] => 1
                            [publish_posts] => 1
                            [edit_pages] => 1
                            [read] => 1
                            [level_10] => 1
                            [level_9] => 1
                            [level_8] => 1
                            [level_7] => 1
                            [level_6] => 1
                            [level_5] => 1
                            [level_4] => 1
                            [level_3] => 1
                            [level_2] => 1
                            [level_1] => 1
                            [level_0] => 1
                            [edit_others_pages] => 1
                            [edit_published_pages] => 1
                            [publish_pages] => 1
                            [delete_pages] => 1
                            [delete_others_pages] => 1
                            [delete_published_pages] => 1
                            [delete_posts] => 1
                            [delete_others_posts] => 1
                            [delete_published_posts] => 1
                            [delete_private_posts] => 1
                            [edit_private_posts] => 1
                            [read_private_posts] => 1
                            [delete_private_pages] => 1
                            [edit_private_pages] => 1
                            [read_private_pages] => 1
                            [delete_users] => 1
                            [create_users] => 1
                            [unfiltered_upload] => 1
                            [edit_dashboard] => 1
                            [update_plugins] => 1
                            [delete_plugins] => 1
                            [install_plugins] => 1
                            [update_themes] => 1
                            [install_themes] => 1
                            [update_core] => 1
                            [list_users] => 1
                            [remove_users] => 1
                            [add_users] => 1
                            [promote_users] => 1
                            [edit_theme_options] => 1
                            [delete_themes] => 1
                            [export] => 1
                        )

                )

            [editor] => WP_Role Object
                (
                    [name] => editor
                    [capabilities] => Array
                        (
                            [moderate_comments] => 1
                            [manage_categories] => 1
                            [manage_links] => 1
                            [upload_files] => 1
                            [unfiltered_html] => 1
                            [edit_posts] => 1
                            [edit_others_posts] => 1
                            [edit_published_posts] => 1
                            [publish_posts] => 1
                            [edit_pages] => 1
                            [read] => 1
                            [level_7] => 1
                            [level_6] => 1
                            [level_5] => 1
                            [level_4] => 1
                            [level_3] => 1
                            [level_2] => 1
                            [level_1] => 1
                            [level_0] => 1
                            [edit_others_pages] => 1
                            [edit_published_pages] => 1
                            [publish_pages] => 1
                            [delete_pages] => 1
                            [delete_others_pages] => 1
                            [delete_published_pages] => 1
                            [delete_posts] => 1
                            [delete_others_posts] => 1
                            [delete_published_posts] => 1
                            [delete_private_posts] => 1
                            [edit_private_posts] => 1
                            [read_private_posts] => 1
                            [delete_private_pages] => 1
                            [edit_private_pages] => 1
                            [read_private_pages] => 1
                        )

                )

            [author] => WP_Role Object
                (
                    [name] => author
                    [capabilities] => Array
                        (
                            [upload_files] => 1
                            [edit_posts] => 1
                            [edit_published_posts] => 1
                            [publish_posts] => 1
                            [read] => 1
                            [level_2] => 1
                            [level_1] => 1
                            [level_0] => 1
                            [delete_posts] => 1
                            [delete_published_posts] => 1
                        )

                )

            [contributor] => WP_Role Object
                (
                    [name] => contributor
                    [capabilities] => Array
                        (
                            [edit_posts] => 1
                            [read] => 1
                            [level_1] => 1
                            [level_0] => 1
                            [delete_posts] => 1
                        )

                )

            [subscriber] => WP_Role Object
                (
                    [name] => subscriber
                    [capabilities] => Array
                        (
                            [read] => 1
                            [level_0] => 1
                        )

                )

        )

    [role_names] => Array
        (
            [administrator] => Administrator
            [editor] => Editor
            [author] => Author
            [contributor] => Contributor
            [subscriber] => Subscriber
        )

    [role_key] => wp_beta_user_roles
    [use_db] => 1
)

Bên trên là thông tin Roles và Capabilities mặc định trong WordPress 4.1.2, nhóm người dùng và phân quyền được được lưu vào cơ sở dữ liệu sau khi bạn cài đặt blog. Mỗi lần bạn thay đổi phân quyền cho người dùng hoặc cho một nhóm người dùng nào đó thì những thay đổi này sẽ được lưu vào cơ sở dữ liệu, sẽ không có cơ chế cho bạn khôi phục lại thông tin mặc định, bạn chỉ còn cách là cài đặt lại hoặc là thiết lập lại bằng code hoặc bằng tay thông qua việc chỉnh sửa trực tiếp trong cơ sở dữ liệu. Do vậy, mình đăng thông tin này là để các bạn làm code, nếu có lỡ thay đổi thông tin role và capability thì có cái để thiết lập lại.

Nhóm và phân quyền trong WordPress

Hình ảnh bên trên cho bạn biết được thông tin về nhóm người dùng và phân quyền tương ứng. Trong đó, nhóm Subscriber sẽ có quyền hạn thấp nhấp, thường được gán cho người dùng khi họ mới đăng ký, và nhóm Super Administrator sẽ có quyền hạn cao nhất, nhưng nhóm này chỉ có hiệu lực khi bạn sử dụng WordPress Multisite. Đối với WordPress các phiên bản cũ thì bạn sẽ có hệ thống phân quyền theo kiểu cũ, mà thể loại này ngày nay WordPress không còn sử dụng nữa, tuy nhiên để tránh ảnh hưởng tới các giao diện và plugin đã và đang sử dụng nó thì WordPress vẫn còn giữ lại những thông tin này.

Các Levels trên WordPress

Levels là hệ thống phân quyền đã được sử dụng trước đây của WordPress, hiện tại đối với các phiên bản WordPress mới thì mình khuyên bạn không nên sử dụng chúng, hãy sử dụng Capabilities để mọi thứ được cụ thể và rõ ràng hơn. Bạn cũng có thể xem qua trang Roles and Capabilities trên trang chủ của WordPress Codex để biết thêm thông tin chi tiết. Chúc bạn thành công.