Trước tiên, bạn cần thêm các khả năng sau đây cho vai trò Doctor
và Receptionist
vai trò:
list_users
edit_users
create_users
delete_users
Bây giờ chúng ta có thể có được để làm việc với các điều khiển mà người sử dụng có thể tạo / edite / xóa. Hãy bắt đầu với chức năng "người trợ giúp" sẽ trả về vai trò nào mà người dùng được phép chỉnh sửa:
/**
* Helper function get getting roles that the user is allowed to create/edit/delete.
*
* @param WP_User $user
* @return array
*/
function wpse_188863_get_allowed_roles( $user ) {
$allowed = array();
if ( in_array( 'administrator', $user->roles ) ) { // Admin can edit all roles
$allowed = array_keys( $GLOBALS['wp_roles']->roles );
} elseif ( in_array( 'Doctor', $user->roles ) ) {
$allowed[] = 'Receptionist';
$allowed[] = 'Guest';
} elseif ( in_array( 'Receptionist', $user->roles ) ) {
$allowed[] = 'Guest';
}
return $allowed;
}
Và để đặt vai trò nào họ có thể chỉ định người dùng:
/**
* Remove roles that are not allowed for the current user role.
*/
function wpse_188863_editable_roles( $roles ) {
if ( $user = wp_get_current_user() ) {
$allowed = wpse_188863_get_allowed_roles( $user );
foreach ( $roles as $role => $caps ) {
if ( ! in_array( $role, $allowed ) )
unset( $roles[ $role ] );
}
}
return $roles;
}
add_filter( 'editable_roles', 'wpse_188863_editable_roles' );
Và cuối cùng, giới hạn người dùng nào họ có thể chỉnh sửa / xóa dựa trên vai trò của họ:
/**
* Prevent users deleting/editing users with a role outside their allowance.
*/
function wpse_188863_map_meta_cap( $caps, $cap, $user_ID, $args ) {
if ( ( $cap === 'edit_user' || $cap === 'delete_user' ) && $args ) {
$the_user = get_userdata( $user_ID ); // The user performing the task
$user = get_userdata( $args[0] ); // The user being edited/deleted
if ( $the_user && $user && $the_user->ID != $user->ID /* User can always edit self */ ) {
$allowed = wpse_188863_get_allowed_roles( $the_user );
if ( array_diff( $user->roles, $allowed ) ) {
// Target user has roles outside of our limits
$caps[] = 'not_allowed';
}
}
}
return $caps;
}
add_filter( 'map_meta_cap', 'wpse_188863_map_meta_cap', 10, 4 );
Doctors
,Receptionist
vàGuest
không thể chỉnh sửa hồ sơ của riêng họ quá. Tôi muốn họ chỉnh sửa hồ sơ của riêng họ. Làm thế nào tôi có thể làm điều đó?