使用添加新用户角色时add_role()
, 默认情况下,是否有属于角色(或角色允许)的功能?
可以在不定义任何功能的情况下创建角色。数据库中将没有为此角色设置任何功能。但是,您可以通过在创建角色时将功能设置为false来明确拒绝功能。
$capabilities
(数组)(可选)功能列表,例如数组(\'edit\\u posts\'=>true,\'delete\\u posts\'=>false);
我看到过这样的例子,但我想知道,除非WordPress假设新创建的角色具有某些功能,否则为什么这是必要的,除非另有排除。
例如,是否假设所有角色都具有read
功能,除非明确排除该功能?我可以使用get_role( $new_role )->capabilities;
获取显式设置的功能列表,但这并不能回答我关于WordPress如何处理新角色的问题。如果没有为新角色显式设置功能,则返回空。
我必须排除我不希望角色拥有的所有功能,还是WordPress假定所有功能都为false,直到它们设置为true?
编辑:这个问题的灵感来自an example 在开发人员站点上,将创建角色时的功能设置为false。我不明白为什么这是必要的。
$result = add_role(
\'guest_author\',
__( \'Guest Author\', \'testdomain\' ),
array(
\'read\' => true, // true allows this capability
\'edit_posts\' => true,
\'delete_posts\' => false, // Use false to explicitly deny
)
);
最合适的回答,由SO网友:iyrin 整理而成
我发现WordPresshas_cap()
函数,这些函数依赖于user_can()
和current_user_can
, 对于空功能,显式返回false。
示例:如果功能作为参数传递,请使用current_user_can()
, 此功能将把功能传递给has_cap()
并返回结果:
return call_user_func_array( array( $current_user, \'has_cap\' ), $args
has_cap()
如果请求的功能不存在或值为false,将返回false:
foreach ( (array) $caps as $cap ) {
if ( empty( $capabilities[ $cap ] ) )
return false;
}
这是因为
empty()
函数在任何一种情况下都返回true。
如果变量不存在或其值等于FALSE,则认为该变量为空。
除非我对这些函数的工作原理有误解,否则可以肯定地说no default capabilities are attributed to a new role unless explicitly set to true. 没有必要explicitly deny 使用创建新角色时的功能add_role()
我看不出有什么理由这么做。如果未列出某项功能,则用户将无法获得该功能。
SO网友:Mark Kaplun
这是一种误导性的方式来看待wordpress功能是如何工作的。本质上,没有包含所有功能的结构,所有这些都归结为开发人员为has_cap
作用与核心相关的能力有一个核心结构,但这确实是可以做的事情的子集。
功能系统有一个默认值,管理员拥有所有功能,没有其他关于任何其他用户的假设。
因此,讨论应该是关于特定的能力,而不是关于一些一般的能力概念。
现在,当关注核心功能时,传统的做法是,无论存储功能的价值如何false
意味着用户不具备该能力,因此空存储应该意味着用户没有核心能力(也没有其他能力,但这些能力可能不依赖于核心能力结构)。
但重要的是要记住,功能只是一个API,代码不必使用API,因此,当您特别询问“具有空功能的用户将具有读取功能”时,这在很大程度上取决于特性的开发人员如何看待这种功能。例如,我可以看到对仪表板的访问可能是无条件的,并且可以在默认情况下访问自己的配置文件。更极端的是,据我所知,几乎没有主题在授予对前端内容的访问权限之前实现功能检查,因此,摆弄“读取”风格的功能是没有意义的。