【发布时间】:2014-07-10 12:44:44
【问题描述】:
如何设置基本用户权限,使用户无法运行“Hubot die”或“Hubot show storage”等命令?
我可以看到有一个名为 hubot-auth 的脚本,但这似乎是为了在其他脚本中实现它而不是控制现有的命令。
【问题讨论】:
-
投反对票的人能否解释一下他们投反对票并要求关闭它的原因?
标签: hubot
如何设置基本用户权限,使用户无法运行“Hubot die”或“Hubot show storage”等命令?
我可以看到有一个名为 hubot-auth 的脚本,但这似乎是为了在其他脚本中实现它而不是控制现有的命令。
【问题讨论】:
标签: hubot
Automation and Monitoring with 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 所做的),然后在每个脚本中检查它,而不是硬编码用户名。
希望对您有所帮助。
【讨论】: