我想对所有站点使用相同的用户和用户元,这意味着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提供程序中设置并推送到相关站点。