每用户的后端访问状态

时间:2016-08-16 作者:mb460

我需要一些帮助!

当我网站上的某个成员停止付款、其成员资格过期或取消时,该插件仍然允许在wp登录时进行登录访问。php,它将它们直接发送到后端控制面板。

我需要的是允许他们登录,但是,根据他们的;状态;。这在一秒钟内应该更有意义。

信息

表:wp\\u pmpro\\u memberships\\u usersField:user\\u idField:status字段中的statusData:cancelled、Inactive、Active(可能还有其他,但这些是我看到的)

“字段”;用户id“;“匹配”;ID“;“自”;wp用户”;

所以,我需要的是,wp登录。php区别于;“状态”;级别。

如果状态为“;“活动”;重定向到;仪表板“;

否则,取消/限制对仪表板的所有访问,并重定向到;会员资格页;。

此时,他们可以续订其成员资格并重新启用仪表板访问。

还是有一个基于成员身份的插件已经做到了这一点?????我想不会,因为您似乎必须更改核心文件才能完成这一任务。不管怎样,我都需要完全自动化。

请帮忙!!

P、 不幸的是,我需要的是工作代码,而不是理论。我不是一个伟大的程序员。我知道这有很多要求,但是,我在这方面非常需要帮助,我负担不起人们为实现这一目标所要求的费用。

2 个回复
SO网友:bynicolas

我决定仍然根据标题的前提提供答案backend access per user status

注意:这是对基于用户状态(角色或功能)授予或限制访问的概念的解释。因此,这可以或不能直接应用于您的情况,因为您使用了具有自己逻辑的第三方插件。但是,我仍然认为它是相关的,因为我在这里展示了一些基本的WP访问逻辑,我相信您的插件部分或全部都是基于这些逻辑的。

现在是详细的解释!

基本上,我们要做的是

检查当前用户状态级别(我会将状态映射到功能)

  • 如果状态为active 然后授予对仪表板的访问权限pending, canceled, inactive, 等)然后重定向到注册页,我将保持较低的复杂性以便于解释,但我们可以检查更多上下文,并为每个上下文应用不同的规则。就在这里”active“以及elsebackend access per user status 假设状态逻辑由另一个进程处理

    角色就像功能的容器,定义用户的上下文。

    功能是我们可以检查以了解是否允许某个操作的标志。比如说edit_posts 是WP能力。有支票if( current_user_can( \'edit_posts\' ) ){ // Do something } 将返回true 如果标志edit_posts 如果我们不采取行动,它就会失败,我们可以采取其他行动或纾困。

    一个角色可以有一个或多个功能,我们可以向角色添加自定义功能,也可以从角色中删除功能。我们还可以切换标志,这在DB查询方面更好(标志切换是在运行时完成的,因此没有DB查询),我们还可以使用核心功能或我们自己的自定义功能创建自定义角色。这就是为什么WP对许多用例如此灵活。

    我们可以使用过滤器为特定用户或特殊上下文动态添加功能。

    返回您的会员插件。我假设插件会进行一系列检查,以查看成员订阅是否有效。我还假设您至少有两个可用角色。对于有效的成员身份,我们将其称为活动成员,对于以下成员身份,我们将其称为非活动成员expired, canceled 等等。如果您的用户还不是成员,他可能会使用WP核心角色subscriber 除了访问他/她的个人资料页面之外,没有其他真正的功能。同样,我想当然地认为,成员资格插件将根据用户成员身份的验证以编程方式更改用户的角色。(通常这是/应该由任何(好的)成员资格插件完成)

    最后,一旦所有这些都设置好了,我们将有一个函数,该函数将使用current_user_can 功能和user_has_cap 根据is当前角色筛选和修改用户的访问权限。(当前角色基于插件成员身份验证)

    下面是一个基于我刚才展示的内容的示例。我们的活跃成员角色应该能够see_premium_content (或无论这是什么示例)我们的非活动成员不会或设置为false。基于此,我们需要两个函数来检查和限制。它看起来像这样。

    add_action( \'init\', \'wpse_backend_access_rules\' );
    function wpse_backend_access_rules(){
    
      // check to see if current logged in user can "see_premium_content" add restriction if not by modifying capabilities
      if( ! current_user_can( \'see_premium_content\' ) ){
        add_filter( \'user_has_cap\', \'inactive_membership_cap_filter\', 10, 3 );
      }
    }
    
    
    function inactive_membership_cap_filter( $allcaps, $cap, $args ) {
    
      // give only permission to access own profile in dashboard.
      // On the profile dashboard, you can output a message inviting to sign up again.
      $allcaps = array(
        \'read\' => true
      );
    
      return $allcaps;
    }
    

  • SO网友:mb460

    好的很酷。。尼古拉斯。如果你还在阅读,这是我收集的资料的细目。

    我相信你对我要实现的目标有很好的理解,但我想谈几件事,以验证我们是否在同一页上。。。包括我自己。

    这个插件的逻辑确实在不同的价格水平上创建了成员资格。它基本上允许用户阅读帖子中的各种“类别”,或特定的成员区域页面。这根本不是我想要或需要的。然而,它接受定期账户的资金,并创建/生成用户。第二个插件创建角色、角色组等,我可以允许特定用户使用特定的仪表板内容。通过这一点,我可以说,例如,给一个由成员插件创建的“免费成员”用户一个访问“属性”的特定角色(如在家/房子中)。或者,“企业会员”可以拥有“完全访问权”,以访问物业、土地、商业物业、公寓等等。

    话虽如此,这两个插件都不限制过期后的仪表板访问。由于他们付费访问的区域是由角色设置的,而不是外部页面区域,例如帖子或网站公共端的特定页面,所以我需要这个限制。不过,我觉得你对这个概念掌握得很好。

    至于要点3,是的,我知道根据状态值可能有多种潜在情况,但我可以将它们发送到注册页面,而不管状态如何,除了“活动”之外。这是我之前和自己争论过的事情,就像你一样,我认为“保持低复杂性”。

    此后,关于角色的讨论很多,这是我最近在配置角色插件时花了几个小时对着显示器大喊大叫后完全理解的一个概念。然而,db的角色区域不是状态所在的位置,而是成员插件的一部分。但是你刚才也这么说了。

    是的,它做了大量的检查,我有6个角色或角色组。我还没有选择使用哪个。我认为是团队。但正如第二段所述,关于访问和“状态”等。。。无需重复。

    现在,这就是“再次,我想当然地认为,成员插件将根据用户成员身份的验证以编程方式更改用户的角色。(通常这是/应该由任何(好的)成员插件完成)”成员插件根本不分配、创建、更改、委派等角色。它只允许访问特定的可见网站内容。比如“你现在可以访问example.com/paid\\u stuff/free\\u area”。。。这就是问题所在。我试图让它做一些它天生不做的事情。我还没有找到一个成员插件,它可以创建用户角色/组,并改变对仪表板元素的潜在访问权限,但事实上,它很可能不会执行“只允许用户查看他们上传的媒体”之类的操作。我的角色插件就是这样做的。这就是为什么整个事情一团糟。我必须使用3个插件来完成我所需的80-90%,并且必须手动更新所有客户的访问权限,手动分配角色等。我可以完成大部分工作,但是。我不想在我的桌面上设置日历,每天提醒要检查的用户,并暂时禁止他们作为用户访问,这样他们就无法访问,因为他们的帐户过期了。这不是一个可扩展的解决方案。

    但我还是觉得你明白了。

    “最后,一旦所有这些都设置好了,我们将有一个功能,该功能将使用current\\u user\\u can函数和user\\u has\\u cap filter,并根据is current role修改用户的访问权限。(当前角色基于插件成员身份验证)”这部分我不理解,也不知道我们是否在同一页上。可能是我,所以我会重申。在这之前你说过

    “同样,我想当然地认为,会员插件会根据用户的会员身份验证,以编程方式更改用户的角色。(通常,这是/应该由任何(好的)会员插件完成)”但我的不是。那么,上一段是否仍然有效?还是现在需要修订,因为提供的代码可能基于这个想法?

    鉴于前面的段落,最后一段是我迷路的地方。所以基本上,我对“好吧,那么你怎么做”感到迷茫。lol和。。我知道这听起来也很荒谬,但是。我要看什么文件?功能或wp登录以实现上述更改?而且,我从来没有在运行时使用或编程任何收集DB信息的东西。这对我来说是一个非常陌生的概念。但这也解释了为什么我从未在这些页面中找到任何查询。

    然而,我认为我们正在变暖。。但长话短说,你肯定理解这个问题。但我不明白解决办法。英雄联盟