0

我正在开发自定义 Drupal8 模块。我的模块使用这个路由文件:

kalvis.routing.yml

 kalvis.content:
      path: '/kalvis/{from}/{to}'
      defaults:
        _controller: '\Drupal\kalvis\Controller\kalvisController::content'
        _title: ''
      requirements:
        _permission: 'access content'

part 代表什么_permission,我在哪里可以找到这个参数的所有可能值的列表?(总的来说,我看过的只是使用过access contentaccess administrative content但我想还有很多)

PS:我正在使用安装在 WAMP 上的 Drupal 8 beta 10

4

3 回答 3

1

如果您想查看所有权限的列表,下面的代码应该可以工作。工作。如果您正在编写自己的模块,则可以定义自己的权限并测试用户是否具有具有该权限的角色。

function my_module_page_attachments_alter(array &$attachments) {

 $perms = array_keys(\Drupal::service('user.permissions')->getPermissions());

}
于 2015-08-24T07:20:21.230 回答
0

要回答这个问题,路由结构的 _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.moduledrupal 核心文件中的 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

希望这可以帮助!:)

于 2021-09-23T15:44:25.500 回答
0

您可以在页面“/admin/people/permissions”中确认。

于 2016-06-02T05:29:44.583 回答