要回答这个问题,路由结构的 _permission 部分是什么。这是 drupal 文档中关于它的作用的引述。
_permission:权限字符串(例如,_permission:'访问内容')。您可以通过使用“,”(逗号)分隔多个权限(例如,_permission:“访问内容,访问用户配置文件”)用于 AND 逻辑或“+”(加号)用于 OR 逻辑(例如,_permission:'访问内容+访问用户配置文件'意味着访问者需要访问内容权限或访问用户配置文件权限才能查看页面。两者都可以。)。模块特定的权限字符串可以在 my_module_name.permissions.yml 中定义。有关详细信息,请参阅将 hook_permission() 替换为 my_module_name.permissions.yml 文件中定义的权限。
来源:https ://www.drupal.org/docs/drupal-apis/routing-system/structure-of-routes
简而言之,这通过仅允许具有指定权限的用户访问它来限制对该路由的访问。要使用它,您需要知道要用于限制访问的权限的系统名称。然后你只需将 then 作为一个字符串放在这个参数后面。就像上面的报价一样。您可以选择使用多个权限,方法是用 , 表示 AND 逻辑或 + 表示 OR 逻辑。权限系统名称中允许有空格并且经常这样做。
如果您在谈论权限的系统名称,我认为没有任何方法可以直接在 ui 中看到它。您可以查看所有权限www.site.com/admin/people/permissions
。如果您赶时间和/或寻找特定权限,您可以随时查看module.permissions.yml
定义此权限的模块文件。
如果您确实想查看所有权限,您可以制作自己的所有系统名称列表。
您可以使用核心模块中的 PermissionHandler 服务。这会获取所有 yaml 并创建一个列表。您可以通过调用Drupal::service('user.permissions')->getPermissions()
(https://api.drupal.org/api/drupal/core%21modules%21user%21src%21PermissionHandler.php/function/PermissionHandler%3A%3AgetPermissions/8.2.x)来调用它
您可以使用或尝试编写与user.module
drupal 核心文件中的 user_role_permissions 函数功能类似的代码。它看起来像这样:
function user_role_permissions(array $roles) {
if (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'update') {
return _user_role_permissions_update($roles);
}
$entities = Role::loadMultiple($roles);
$role_permissions = array();
foreach ($roles as $rid) {
$role_permissions[$rid] = isset($entities[$rid]) ? $entities[$rid]
->getPermissions() : array();
}
return $role_permissions;
}
如您所见,此代码仅使用 loadMultiple 加载所有角色实体(尽管从技术上讲,您应该尽可能使用 entitytypemanager 加载实体$entities = \Drupal::entityTypeManager()->getStorage($entity_type)->loadMultiple([1, 2, 3]);
,有关更多信息,请参见 drupal 实体 api(https://www.drupal.org/docs/ drupal-apis/entity-api/working-with-the-entity-api ))。
加载所有角色后,它会列出所有权限。
来源信息如下。这应该保持最新,因为 drupal 保持他们的文档版本。但是因为评论建议了它,我想我不妨把它写出来以节省一些点击量。
原始的 Drupal 文档。
https://api.drupal.org/api/drupal/core!modules!user!user.module/function/user_role_permissions/8.2.x
希望这可以帮助!:)