如何设置基本用户权限,使用户无法运行“Hubot die”或“Hubot show storage”之类的命令?
我可以看到有一个名为 hubot-auth 的脚本,但这似乎是为了在其他脚本中实现它而不是控制现有的命令。
如何设置基本用户权限,使用户无法运行“Hubot die”或“Hubot show storage”之类的命令?
我可以看到有一个名为 hubot-auth 的脚本,但这似乎是为了在其他脚本中实现它而不是控制现有的命令。
在使用 Hubot 的自动化和监控一书(无耻插件)中有一个小章节。摘抄:
只有管理员用户可以分配角色。您不必在分配之前创建角色。您所要做的就是告诉 Hubot 谁在使用hubot <user> has <role> role
. 而且您不再需要使用那些神秘的 ID:
Tomas hubot Jesse Pinkman has developer role
Hubot Tomas: Ok, Jesse Pinkman has the 'developer' role.
使用以下命令检查分配的角色hubot what roles does <user> have?
:
Tomas hubot what roles does Jesse Pinkman have?
Hubot Tomas: Jesse Pinkman has the following roles: developer.
要删除某人的角色,请使用hubot <user> does not have <role> role
:
Tomas hubot Jesse Pinkman does not have developer role
Hubot Tomas: Ok, Jesse Pinkman doesn't have the 'developer' role.
您可以将多个角色分配给多个用户。
现在,是时候公布坏消息了。虽然 Hubot Auth 非常灵活,但您必须编辑脚本才能应用这些角色。幸运的是,没有太多可编辑的。有一个简单的函数可以检查用户是否具有角色 - robot.Auth.hasRole(msg.envelope.user, '<role>')
。这是您在脚本中使用它的方式:
module.exports = (robot) ->
robot.respond /do dangerous stuff/i, (msg) ->
if robot.auth.hasRole(msg.envelope.user, 'developer')
doDangerousStuff(msg)
else
msg.reply "Sorry, you don't have 'developer' role"
doDangerousStuff = (msg) ->
msg.send "Doing dangerous stuff"
如原始答案中所述,您必须是 Hubot 管理员才能分配角色。要定义 Hubot 管理员,您必须将HUBOT_AUTH_ADMIN
环境变量设置为管理员 ID 的逗号分隔字符串。如果您使用的是 Slack,您可以使用他们的API来确定应该是管理员的用户的 ID。对于 Slack,这些 ID 看起来像U123ABC1D
.
我可以看到这是在脚本hubot die
中定义的。ping.coffee
也许您可以在运行命令时检查授权用户?
像这样的东西?
if msg.message.user.name in [authorized_user1, authorized_user2,..]
# Do more stuff
其他显示存储脚本也可以这样做。我不确定这是否是最好的方法,因为您必须修改所有不想执行的脚本。
一种更简洁的方法是在启动时将用户列表设置为 env 变量(有点像 hubot-auth 所做的),然后在每个脚本中检查它,而不是硬编码用户名。
希望有帮助。