Pulsar在 namespace 层级管理权限(即在tenantsclusters内)。

授权

你可以授权给指定的 role 一系列操作权限,例如produceconsume

pulsar-admin

使用 grant-permission 子命令指定命名空间,通过 --actions flag 指定操作,通过 --role flag 指定角色:

  1. $ pulsar-admin namespaces grant-permission test-tenant/ns1 \
  2. --actions produce,consume \
  3. --role admin10

当设置 broker.conf 中的authorizationAllowWildcardsMatchingtrue 时,可以使用通配符授权。

例如:

  1. $ pulsar-admin namespaces grant-permission test-tenant/ns1 \
  2. --actions produce,consume \
  3. --role 'my.role.*'

角色 my.role.1my.role.2my.role.foomy.role.bar 等都可以生产和消费消息。

  1. $ pulsar-admin namespaces grant-permission test-tenant/ns1 \
  2. --actions produce,consume \
  3. --role '*.role.my'

角色 1.role.my2.role.myfoo.role.mybar.role.my 等都可以生产和消费消息。

注意:通配符只能用于角色名称的开始或末尾。

例如:

  1. $ pulsar-admin namespaces grant-permission test-tenant/ns1 \
  2. --actions produce,consume \
  3. --role 'my.*.role'

这种情况下,只有 my.*.role 有权限, my.1.rolemy.2.rolemy.foo.rolemy.bar.role不可以生产或消费消息。

REST API

POST /admin/v2/namespaces/:tenant/:namespace/permissions/:role

Java

  1. admin.namespaces().grantPermissionOnNamespace(namespace, role, getAuthActions(actions));

获取授权信息

查看在单个命名空间中,不同角色的权限。

pulsar-admin

使用 permissions 子命令,指定命名空间:

  1. $ pulsar-admin namespaces permissions test-tenant/ns1
  2. {
  3. "admin10": [
  4. "produce",
  5. "consume"
  6. ]
  7. }

REST API

GET /admin/v2/namespaces/:tenant/:namespace/permissions

Java

  1. admin.namespaces().getPermissions(namespace);

取消权限

取消某些角色的权限后,这些角色将不再可以访问指定的命名空间。

pulsar-admin

使用 revoke-permission 子命令,使用--role flag 指定命名空间和角色:

  1. $ pulsar-admin namespaces revoke-permission test-tenant/ns1 \
  2. --role admin10

REST API

DELETE /admin/v2/namespaces/:tenant/:namespace/permissions/:role

Java

  1. admin.namespaces().revokePermissionsOnNamespace(namespace, role);