我已经在Woocommerce中定义了一个自定义角色。此用户仅需要访问网址以编辑shop_orders并检查单个商店订单。像:
/wp-admin/edit.php?post_type=shop_order
/wp-admin/post.php?post=124&action=edit
/wp-admin/post-new.php?post_type=shop_order
如果他们在任何地方,我想将它们重定向到:
/wp-admin/edit.php?post_type=shop_order
实际上,他们只应该看到订单,修改订单和创建订单。我已为此添加了所有正确的权限,并大幅修改了菜单,因此无法查看产品','我的个人资料等等。但是,如果他们直接访问了一些他们仍会加载的链接('仪表板'用于一个和我的设置')。从仪表板中删除它们!=删除对它们的访问权限。
我试图通过重定向除了带有通配符的一些列入白名单的路线之外的所有内容来加强我的安全性。有关如何接近的任何想法?感谢。
答案 0 :(得分:1)
这听起来像是您可以使用此过滤器执行的操作: https://codex.wordpress.org/Plugin_API/Filter_Reference/user_has_cap
我对它的理解是,当wordpress查询用户是否有能力在网站上做某事时,例如edit_posts
,然后您可以应用更多逻辑(在您的示例中,检查其角色是否是您定义的自定义角色),以决定如果您愿意,可以限制或增强该功能。在您的情况下,如果用户不符合您的条件(他们没有请求预定义的页面),您可以重定向。
概念的快速证明(我认为):
function only_let_user100_see( $allcaps, $cap, $args ) {
if($args[0] === 'edit_posts' && is_admin()) {
if(get_current_user_id() !== 100) {
echo "No way";
exit;
}
} else {
return $allcaps;
}
}
add_filter( 'user_has_cap', 'only_let_user100_see', 10, 3 );