是否未在WordPress多站点中指定用户角色?

时间:2017-04-13 作者:Maharshi

我有Wordpress多站点,如下所示:域上的多站点。com公司

sub1上的多站点。领域com公司

sub2上的多站点。领域com公司

sub3上的多站点。领域com公司

X multisite on subx.domain.com

我正在使用域。com的用户和所有其他子X的usermeta表。领域com,在所有其他多站点上添加以下代码


define( \'CUSTOM_USER_TABLE\', $table_prefix.\'my_users\' );

define( \'CUSTOM_USER_META_TABLE\', $table_prefix.\'my_usermeta\' );

并使用

处理登录注销Cookie的“用户会话同步器”一切正常我面临的唯一问题是我的用户角色没有同步我的意思是

If Someone Create account at domain.com or any subx.domain.com account is also created at all other subx.domain.com

but

Any other subx.domain.com Multisite Don\'t have user role so they can\'t do Nothing on any other Multisite

<人力资源>

What I Want to Do ?

<我想在每个站点实时复制相同的用户角色

我想对所有站点使用相同的用户和用户元,这意味着everysite将使用相同的用户元功能,这对我来说更有用,因为我想使用mycred插件,我不想出现任何问题**(更有用)


    编辑

    所以,例如,我在网络站点上有编辑角色的帐户,我在其他网络站点上也有帐户,但我在那里不是编辑,即使我没有任何角色那里我的任何网络站点需要具有相同的角色,因为我的多个多站点网络以这种方式工作

    if you would say why I or anyone need that kind of setup ?

    <答:我有一个与stack overflow类似的站点,它与stack overflow完全不同,但其工作方式是相同的,因此如果您注册stack overflow的任何子站点,您将可以使用相同的帐户访问所有子站点,但我也希望角色相同&;还需要全球积分系统

2 个回复
最合适的回答,由SO网友:Maharshi 整理而成

我刚从网上弄到这个,这个对我有用,需要一些工作

金斯塔。com/blog/share登录wordpress

SO网友:Tom J Nowell

我想对所有站点使用相同的用户和用户元,这意味着everysite将使用相同的用户元功能。这对我来说更有用,因为我想使用mycred插件,我不想出现任何问题**(更有用)

这是问题的症结所在,具体而言:

everysite将使用相同的usermeta功能

每个站点都已经在使用相同的用户和用户元,问题是角色和功能没有存储在用户元中!他们有一张单独的桌子

那么,如果我也共享角色表呢

那不行。如果“角色”表显示您在站点#3上具有编辑器状态,则我们现在有一个问题,因为您有多个多站点安装。是指sub1上的站点#3吗。领域com?是指sub2上的站点#3吗。领域com?没有办法知道

问题更为严重,尽管角色和功能的安装范围不是很广,而是站点/博客范围。我可以是一个博客的编辑,但可以是同一个多站点安装中另一个博客的管理员。

例如,WordPress。com是一个巨大的多站点安装。我可以创建一个网站并成为该网站的管理员,但我没有访问您网站的管理员权限。

默认情况下,如果我登录到一个站点,我没有用户角色,这是有意的。

误导性的超级管理员功能不是角色。每个博客都有一个选项表,但在整个多站点中存在另一个选项表。在这个选项中有一个用户ID列表,这决定了你是否是超级管理员。

如果您的用户ID出现在这个选项中,您几乎可以做任何事情,它将覆盖并假设您有一个功能。比这要复杂一点,但这是一个很好的近似值。在角色表中找不到超级管理员角色。

那么,我如何构建一个系统,在这个系统中,我赋予用户一个无处不在的角色

一个通用角色,你只设置一次,就可以在任何地方设置?这个功能不是现成的,它与标准WordPress的工作方式相反(可能会产生意想不到的副作用)。

从根本上讲,您所构建的是单点登录,但它是通过一个脆弱的共享用户表系统实现的。

因此,您需要:

如果插件添加了新角色,那么这些角色将不可用,除非它添加到所有安装的所有站点中。我建议将角色存储在user meta中,并使用用户编辑配置文件屏幕。您还需要代码来检查角色和功能,以防止用户更改自己的角色。请非常小心地注意此代码,因为它将是一个关键的安全故障点。

遗憾的是,这样做可能很困难,也可能很昂贵:

WP_User 对象不提供简单的筛选器,可能需要记下一个角色及其所有功能,并提供您自己的WP\\U用户替换,这很可能会导致兼容性问题。如果用户角色与预期匹配,您可以在每次页面加载时检查,如果不匹配,则进行设置。这将更加昂贵,但我要指出的是,更可靠、更兼容,所有这些都需要花费高昂的维护成本。您的设置将您推到了高技术债务的角落,这是成本之一。

将来重建系统时,请考虑使用SSO/单点登录系统。这里的长期答案是使用OAuth或SAML提供的联邦登录。在这种情况下,您将在用户登录时向站点提供身份验证级别(如果用户已经使用SSO提供程序进行了身份验证,则登录可能是无缝重定向),然后在将用户传递回站点时设置适当的角色。

确实,您将不再在安装之间共享用户表,但任何需要同步的信息都将在中央SSO提供程序中设置并推送到相关站点。