首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pymongo运行getRole命令?

如何使用pymongo运行getRole命令?
EN

Stack Overflow用户
提问于 2018-01-31 14:37:04
回答 1查看 1.1K关注 0票数 1

在创建新角色之前,我希望检查mongodb中是否存在角色。我试着这样做:

代码语言:javascript
复制
result = self.client[database].command("getRole", name=app_name)

不幸的是,我得到了以下错误:

代码语言:javascript
复制
msg = msg or "%s"
raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: no such command: 'getRole', bad cmd: '{ getRole: 1, name: "test" }'

我指的是以下数据库命令:https://docs.mongodb.com/manual/reference/method/db.getRole/

对于createRole,我可以执行命令:https://docs.mongodb.com/manual/reference/method/db.createRole/#db.createRole

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-03 12:09:55

壳方法 db.*数据库命令不同。

使用roleInfo command,您可以获得特定角色的信息。

代码语言:javascript
复制
db.command({
    'rolesInfo': {'role': 'noremove','db': 'test'},
    'showPrivileges': True, 'showBuiltinRoles': True
})

当存在匹配的角色时,上面的命令返回此表单的结果。

代码语言:javascript
复制
{'ok': 1.0,
 'roles': [{'db': 'test',
   'inheritedPrivileges': [{'actions': ['find', 'insert', 'update'],
     'resource': {'collection': 'test', 'db': 'test'}}],
   'inheritedRoles': [],
   'isBuiltin': False,
   'privileges': [{'actions': ['find', 'insert', 'update'],
     'resource': {'collection': 'test', 'db': 'test'}}],
   'role': 'noremove',
   'roles': []}]}

当没有匹配的角色时,您将得到以下结果:

代码语言:javascript
复制
{'ok': 1.0, 'roles': []}

检查某个角色的存在,将检查返回结果中的“角色”列表的长度,如下所示:

代码语言:javascript
复制
noremove_role = db.command({
    'rolesInfo': {'role': 'noremove','db': 'test'},
    'showPrivileges': True, 'showBuiltinRoles': True
})

if not len(noremove_role['roles']):
    # create role
    pass

有更好的办法吗?

是的,为了符合请求宽恕而不是许可的理念,创建角色并处理尝试添加现有角色所产生的异常。

代码语言:javascript
复制
from pymongo.errors import DuplicateKeyError
import logging

logger = logging.getLogger()

try:
    db.command(
        'createRole', 'noremove',
        privileges=[{
            'actions': ['insert', 'update', 'find'],
            'resource': {'db': 'test', 'collection': 'test'}
        }],
        roles=[])
except DuplicateKeyError:
    logger.error('Role already exists.')
    pass
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48544709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档