在创建用户时指定对不同页面的访问级别

时间:2021-06-27 作者:hossein

我们有一个具有多个不同链接和页面的个人模板,我们希望实现在创建用户时指定用户访问级别的功能,即指定是否查看链接,还指定是否允许其进入页面?例如,我们有一个创建用户的表单,在该表单中,我们可以指定用户是否有权访问某个页面,您有什么建议?

1 个回复
SO网友:VoidZA

几个月前,我为一位客户创建了一些类似的东西。我找不到任何能满足我当时需要的东西。它需要一些自定义代码(没有什么太疯狂的)。我将试着快速分析一下我是如何做到这一点的,以帮助您概述您需要做什么,以及您需要考虑的事情。

我还创建了用户组来集体管理组的访问,而不是单个用户,但您可以跳过这一部分,只关注没有组的用户。

重要提示:我决定将网站内容的访问级别分为3层,公共层、登录层和私有层。因此,在我的管理界面中,我会指定每个页面都是这三层中的一层。因此,现在我可以通过将主页和关于页面设置为public,让任何人都可以访问它,然后联系人页面只允许登录的任何人访问,最后可能是商店页面只允许特定用户组访问。

数据库我创建了3个表:

  • wp_user_groups -- 这是用户组,刚刚id, slugtitle, 但这首歌和标题只是出于管理目的。

  • wp_user_group_access -- 这是数据透视表(group_id, post_id) 将组ID链接到的位置post_ids (post_ids = page_ids).

  • wp_user_user_group -- 另一个枢轴talbe(group_id, user_id) 将用户链接到组。同样,如果您不打算使用组,您可以直接跳到只进行用户访问,在其中分配访问权限post_ids 直接发送给用户。

    页面访问级别——当时我决定将这些级别存储在包含帖子ID的wp\\U选项数组中,所以我有3个wp_options, access_posts_public, access_posts_logged_in, 和access_posts_private. 您仍然可以使用表,但在我的例子中,wp\\u选项更易于管理,并且工作良好。

    管理UI(wp管理页面)

    您需要创建一个小的管理界面,在这里可以创建组、向组中添加用户以及向组分配页面/帖子访问权限。

    身份验证

    现在需要检查是否允许用户访问请求的资源。对于我共同使用的(wp)函数,我发现template_redirect 动作钩对此效果最佳。

    您应该做一些比这更干净的事情,比如设置一个身份验证类,但本质上是在您的函数中。php文件添加:

    add_action( \'template_redirect\', custom_authentication );
    function custom_authentication() {
      //Authentication checks
    }
    
    然后,验证检查的顺序使其尽可能简单:

    首先检查页面/帖子id是否在access_posts_public wp_option, 如果是,return (结束)函数

  • 检查用户是否已登录,如果未登录,则将其重定向到登录或其他页面return 您可能不想阻止管理员查看页面
  • 现在用户已登录,请检查页面是否位于access_posts_logged_in wp_option, 如果是,return (结束)函数

相关推荐