概要
hubot-auth というプラグインがありこれを使うと Hubot で権限管理を実装することができます
権限情報は Redis に保存しており、ユーザやロールを管理しています
わざわざ権限管理だけのために Redis を使うのは億劫だったので、環境変数の値だけで権限チェックできるような仕組みを作ってみたので紹介します
環境
- Hubot 2.19.0
- Nodejs 5.9.1
- npm 3.7.3
権限チェックするコードを実装する
まず権限を持つユーザを管理する環境変数を決めます
今回は「HUBOT_ADMIN_USERS」という名前にします
Hubot スクリプト内で以下のように環境変数を受け取りましょう
ADMINS = process.env.HUBOT_ADMIN_USERS
ユーザはカンマ区切りで複数指定できるようにします
なので、ADMINS に入ったあとは split して配列に格納します
if ADMINS
admin_list = ADMINS.split ','
こんな感じ admin_list に格納しましょう
環境変数が設定されていない場合は何もしないようにします
次に権限チェックするクラスとメソッドを準備します
今回は以下のように定義しました
class SimpleAuth
isAdmin: (username) ->
admin_list && username in admin_list
robot.sauth = new SimpleAuth
定義する箇所は「module.exports = (robot) ->」の直下で大丈夫です
あとはこれを必要な箇所で使うだけです
簡単な使い方は以下のような感じです
robot.respond /test auth/i, (res) ->
username = res.message.user.name
if robot.sauth.isAdmin username
res.send "#{username} has admin permisson"
else
res.send "#{username} doesn't have admin permisson"
test auth コマンドが実行されたときに自分のユーザ名を取得してその名前が admin_list に入っているか確認することで権限チェックしています
権限がない場合は else 側の処理をします
今回は環境変数でコントロールしているので、ユーザの追加/更新は環境変数の値を変更することで行い、ユーザの削除は unset などで行ってください
最後に
紹介は以上です
わざわざ Redis を立てたくない場合や、ロールなど細かい権限チェックなどが不要な場合はこれで十分だと思います
0 件のコメント:
コメントを投稿