Capabilities Vs User Meta

时间:2015-02-11 作者:Sisir

使用capabilities 而不是usermeta?

例如capaccess_feature_x vs元access_feature_x. 我可以使用current_user_can() vs公司get_user_meta() 在各种检查中。

那么,功能提供了哪些改进?

编辑这个问题似乎过于宽泛,无法给出具体的答案。因此,我将提供一个示例上下文。请保留您的原始答案,因为它们也很有用,并在您当前的答案下面添加其他信息。

For example,

我的会员网站上的功能feature_x.用于上述示例。我可以同时使用usermeta和功能。您将如何处理给定的问题目前我正在使用meta

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

没有一个答案,因为两者都有利弊,这取决于您想要存储什么以及为什么要存储。

选择时要考虑的差异(可能并非详尽无遗)列表:

功能旨在检查用户是否可以做某事。user_cancurrent_user_can 帮助您检查用户权限。您也可以使用user meta来实现这一点,但一旦您在core中拥有了该功能,就没有任何意义了。

毫无疑问,这些功能可以用于将具有类似特征的用户分组,即使这些用户与权限无关。在这种情况下,用户使用的功能与分类术语用于帖子的功能有些相似。user_can 函数可用于检查用户是否有能力(类似于has_term) 但对于meta来说,没有一个核心函数可以做到这一点。然而,通过功能检索用户集合可能比通过简单的元查询检索用户更昂贵(这只是猜测,不是基于真实的性能分析数据)。

动态过滤(无db更改)all 分配给用户的功能非常简单(尤其是如果使用user_can / current_user_can 没有理由不这样做),而对meta做同样的事情要困难得多。

元数据可以处理嵌套数据(例如,数组,甚至同一元键的不同(组)值)。这在功能上是不可能的。

功能可以按角色分组。角色在后端也有一个UI,允许通过分配角色来分配“一组”功能。meta没有这样的好处。

  • 功能是独立于用户的实体,它们在用户之后仍然存在:如果删除所有具有该功能的用户,它将保留在那里。这一点不适用于meta:如果用户删除了meta,则所有meta都将与用户一起使用。

    在对OP进行编辑之后,我想说的是,功能要好得多:您正在用meta实现core已经用功能实现的东西,这正是功能的目的所在。

    例如,思考add_menu_page 函数,它具有$capability 参数,该参数允许您仅向具有该功能的用户显示菜单页。

    这只是一个示例,有不同的函数接受功能作为参数。此外,正如编辑前的第一点所述,从头开始实现core已经具备的特性是没有意义的。

  • SO网友:Mark Kaplun

    不同之处在于,功能是站点访问权限系统的一部分,它利用内置工具和API来处理权限,并且可以通过内置工具和API进行更改。您可以创建自己的权限方案,但这样就不容易使用期望在功能中处理访问权限的工具或代码进行覆盖。

    通过使用元字段而不是功能,您也失去了将用户分组到角色的能力,这可能很重要,也可能不重要。

    你的问题再次突出了WordPress核心的一个弱点,即内容作者和网站用户之间缺乏分离。当您将用户视为站点的用户时,您应该考虑功能,但如果您的代码将用户作为内容作者处理,那么使用元字段可能会做得更好。

    至于编辑部分中的具体示例。这很好地属于访问控制,您甚至需要它来执行实际角色,因此,功能才是最佳选择。

    SO网友:Ruturaj

    用户功能允许您为特定的用户/用户帐户类型设置站点范围的访问设置,而元数据允许您为每个帖子/页面或Wordpress中支持meta的任何内容单独进行设置。换句话说,功能是ACL(访问控制层)的一部分,而Meta在用于数据表示时是最好的。

    如果您编写的应用程序在应用程序的全局范围内使用某些访问控制,那么用户功能是最好的,而如果您希望对每篇文章/每页应用限制,那么用户元是最好的。请注意,如果您使用功能控制ACL,则只需创建特定用户类型的用户帐户即可应用某些限制;但是,您需要确保(手动)为要应用ACL的每个帖子、页面添加特定的元值。

    功能和元的使用是非常特定于应用程序的,我担心我能否概括出最好的场景,让您定义这两者中哪一个是最好的。

    结束

    相关推荐

    PHP致命错误:无法为wp-includes/capabilities.php中的非对象调用重载函数

    我在apache日志中遇到了太多以下错误。PHP Fatal error: Cannot call overloaded function for non-object in wp-includes/capabilities.php on line 1187这是函数current\\u user\\u can($capability)的内部,第1187行如下所示:$current_user = wp_get_current_user(); 我不知道问题出在哪里?