问题描述
除了管理员,我们如何限制对所有用户的 WP 管理区域的访问?我们网站上的用户拥有自己的个人资料页面,可以执行所需的所有功能。
所以管理员应该对所有除管理员以外的所有权限进行限制。
怎么做?
最佳解决方案
我们可以钩住 admin_init
操作,并通过使用 current_user_can()
功能查看用户是否是管理员,以查看当前用户是否可以使用 manage_options
,这只是管理员可以做的。
当代码粘贴到您的 functions.php 文件中时,当 non-admin 尝试访问仪表盘时,该代码将显示一条消息:
function wpse_11244_restrict_admin() {
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( __('You are not allowed to access this part of the site') );
}
}
add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );
如果您愿意,您可以通过将用户重定向到主页来提供更好的用户体验 ($_SERVER['PHP_SELF']
检查是为了确保我们不会在 AJAX 请求上重定向):
function wpse_11244_restrict_admin() {
if ( ! current_user_can( 'manage_options' ) && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {
wp_redirect( home_url() );
}
}
add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );
如果要将用户重定向到其个人资料页面,请使用上面的代码替换 home_url()
。
次佳解决方案
您可以编写一个插件并钩入 admin_init
。
抄本实际上提供了您正在寻找的功能的示例。
http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_control
第三种解决方案
给出的一些答案在大多数情况下可以很好,但我认为没有一个保证完全正确的问题,因为没有一个答案检查用户角色,他们检查功能和功能可以分配和删除表单角色。所以,要给出一个确切的答案,用户角色必须检查,而不是功能:
add_action( 'admin_init', 'allow_admin_area_to_admins_only');
function allow_admin_area_to_admins_only() {
if( defined('DOING_AJAX') && DOING_AJAX ) {
//Allow ajax calls
return;
}
$user = wp_get_current_user();
if( empty( $user ) || !in_array( "administrator", (array) $user->roles ) ) {
//Redirect to main page if no user or if the user has no "administrator" role assigned
wp_redirect( get_site_url( ) );
exit();
}
}
如果您想检查用户是否具有”manage_options” 功能,您可以。事实上,这是大多数情况下最好的选择。虽然此功能默认与管理员用户相关联,但该功能可以从管理角色中删除,也可以分配给其他用户角色。这就是为什么在大多数情况下,检查用户可以或不能做什么比检查用户角色更好。所以,在大多数情况下,检查功能应该是选择的方式,但是你有这个概念清楚,并为您的情况和目的选择最佳选择:
add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {
if( defined('DOING_AJAX') && DOING_AJAX ) {
//Allow ajax calls
return;
}
if( ! current_user_can( "manage_options" ) ) {
//Redirect to main page if the user has no "manage_options" capability
wp_redirect( get_site_url( ) );
exit();
}
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。