Rundeckでユーザの追加とプロジェクトへのアクセス権限の設定
Rundeckのデフォルトユーザはadmin
のみです。管理者が1人の場合はadmin
のみで十分ですが、複数人で管理する場合は適切な権限を付与するべきです。
そこで、特定のプロジェクトのみ閲覧・編集できるユーザを作成する場合は、設定ファイルを追加・編集することで対応できます。
この記事ではdeveloper
というユーザを作成し、SomeProject
とOtherProject
に対して全権限を設定する場合の手順を説明します。
動作環境
- Ubuntu 14.04 LTS
- Rundeck 2.6.2
ユーザの追加
develop
ユーザを追加し、ログインできるようにします。
$ sudo vi /etc/rundeck/realm.properties
# # This sets the default user accounts for the Rundeck app # admin:admin,user,admin,architect,deploy,build # 以下の行を追記 # ID: developer, PW: devpass の一般ユーザを作成 developer:devpass,user
上記設定ではパスワードが平文になっていますが、以下の手順でMD5のハッシュにすることも可能です。
$ sudo java -cp /var/lib/rundeck/bootstrap/jetty-all-7.6.0.v20120127.jar org.eclipse.jetty.util.security.Password developer devpass
devpass
OBF:1vn41vu91vo41xfj1vmy1vv11vny
MD5:dc067f8a150df19383bc33d7ac9032f7
CRYPT:de6e61/yPOdQg
$ sudo vi /etc/rundeck/realm.properties
# 平文ではなくハッシュ値のパスワードを登録
developer: MD5:dc067f8a150df19383bc33d7ac9032f7,user
特定プロジェクトへのアクセスを許可
Rundeckは/etc/rundeck/
以下の*.aclpolicy
ファイルを読んでいるので、今回はdeveloper
ユーザ用のaclpolicy
ファイルを追加します。
$ sudo vi /etc/rundeck/developer.aclpolicy
# developerユーザのプロジェクト毎のアクセス権限の設定 description: Project settings for developer user context: project: 'SomeProject|OtherProject' # SomeProjectとOtherProjectの2プロジェクトに対する権限の設定 # 上記プロジェクトに関する全権限を許可 for: resource: - allow: '*' adhoc: - allow: '*' job: - allow: '*' node: - allow: '*' by: username: developer --- # developerユーザのrundeck全般のアクセス権限 description: Rundeck settings for developer user context: application: 'rundeck' for: resource: - equals: kind: project deny: [create] # プロジェクトの作成は禁止 - equals: kind: system deny: [read] # システム情報の閲覧禁止 - equals: kind: user deny: [admin] # ユーザ情報の編集禁止 project: - match: name: 'SomeProject|OtherProject' # SomeProjectとOtherProjectの2プロジェクトのみ設定の閲覧可能 allow: [read] by: username: developer
ブラウザからdeveloper
ユーザでRundeckにログインし、SomeProject
とOtherProject
の2つが表示されたら成功です。
参考URL
Redmineのトップメニューにリンクを追加する
検証環境
Redmineのトップメニューにリンクを追加
Redmineの上部には、ホーム、マイページ、プロジェクト等のメニューが並んでいますが、ここに任意のメニューを追加する方法です。 プラグインを用いる方法が一般的だと思われますが、今回は手っ取り早くredmineのファイルを直接編集してしまいます。
Redmineのディレクトリに移動してredmine.rbをバックアップ
$ cd /path/to/redmine/lib/ $ cp redmine.rb redmine.rb-backup
redmine.rbを編集
$ vi redmine.rb
Redmine::MenuManager.map :top_menu do |menu| menu.push :home, :home_path menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true menu.push :help, Redmine::Info.help_url, :last => true # トップメニューにリンクを追加 menu.push :link1, "http://example.com/" menu.push :link2, "http://example.net/" end
これでWebサーバをリロードしてページを更新すると、トップメニューのプロジェクトとヘルプの間あたりにリンクが表示されます。
紹介しておいてなんですが、かなり横着な方法なので、参考URLの記事のようにプラグインを利用したほうがいいですね。
参考URL
ペパボWiMAXでWX02(とクレードル)を買った
タイトルの通り、WiMAXのWX02とクレードルのセットを購入しました。買ったのはホワイトの方です。
WiMAXっていうと各社色々キャンペーンをやっていて、どこで買うか色々悩みました。 キャッシュバックは高額だけど手続きが面倒だし、本家は割引率が悪いしで、候補に残ったのは以下の2つ。
でも、ヨドバシでWX02を買うと割引が適用されないとかで、結局ペパボWiMAXで契約しました。
なんでWiMAXを契約したかというと、近々引越しの予定がありネットが使えないと困るのが一番の理由。 工事の立会は面倒だし工事料金もとられると思うと、固定回線を引くほどのメリットもないかなーと。 WiMAXなら3日で3GB制限があるとはいえ、使い放題プランもあるし、そもそも動画とか大きなファイルのダウンロードとかもしないので、十分実用に耐えうるという結論に至りました。
ペパボ WiMAXの公式サイト から申し込みできますが、ロリポップとかムームードメインとか使っている人はしょっちゅうキャンペーンをやっているので、そちらを利用すると少しお得かと。 初月無料 + 3ヶ月間ギガ放題プラン無料なので、うまいタイミングで申しこめば5,000円分くらい安くなります。
申し込んだ翌日とかに発送されてきて端末到着日から契約開始になるので、月の頭に申し込むと初月無料キャンペーンをフルに活かせるかなーと。
僕はiMacにLANケーブルを直挿ししたいのでクレードルもセットで買ったのですが、必要かは人によりけりだと思います。単に充電するだけならわざわざ買うこともないし、やっぱり欲しくなったら後からAmazonとかで買うこともできます。
UQコミュニケーションズ Speed Wi-Fi NEXT WX02 クレードル NAD32PUU
今のところは通信が遅いとか端末の不具合とか、そういうトラブルもなく快適に使えています。知らぬ間にWiMAXって結構使えるサービスになってたんだなー。
参考URL
Djangoでユーザがグループに所属しているかを判定する
Djangoで、特定のグループに所属しているユーザのみにリンクやページを表示する場合に、以下のような方法があります。
テンプレートタグを用いる方法
テンプレートタグを用いると、ユーザの所属するグループによってページ内の情報やリンクを出しわけることができます。
使い方
以下のin_group.py
というスクリプトを、アプリ内のtemplatetags/
ディレクトリに格納。
hoge/templatetags/in_group.py
from django.template import Library register = Library() @register.filter def in_group(user, team_name): if user.groups.filter(name=team_name).exists(): return True else: return False
テンプレート内でin_group
を呼び出します。
{% load in_group %} {% if user|in_group:"developer" %} <!-- developerというグループに所属するユーザ用のリンク --> <a href="#">開発者向けページ</a> {% else %} <!-- その他のユーザ用のリンク --> <a href="#">権限を申請</a> {% endif %}
if
文と組み合わせることで、特定のグループのユーザのみに情報を表示したり、隠したりすることができます。
user_passes_testを利用する方法
上記のテンプレートタグを利用する方法では、リンクや情報を特定のグループのユーザのみに表示することはできますが、特定ページへのアクセスを制限することはできません。
そこで、user_passes_test
というデコレータを利用することで、特定の条件を満たしたユーザのみがページにアクセスできるようにします。
使い方
views.py
from django.contrib.auth.decorators import login_required, user_passes_test from django.shortcuts import render @login_required @user_passes_test(lambda user: user.groups.filter(name='developer').exists()) def developer_page(request): u'''ログイン済みでdeveloperグループに所属するユーザのみアクセス可能なページ''' return render(request, 'developer.html', {})
user_passes_test
の条件を満たさないユーザはログインページへ飛ばされます。スタッフ権限を持たないユーザが管理サイトへログインしようとした際の挙動と同じですね。
参考URL
バンドのウェブサイトを作りました
タイトルの通り、バンドのウェブサイトを作りました。
そんなに更新頻度も高くないので、BootstrapベースのHTMLページ1枚だけですが、 テンプレートが優秀なので、それなりには見栄えがするかなーと。 趣味でやっているバンドのウェブサイトとしては、これでもきっと立派なほう!
テンプレートは以下のサイトのものを利用しました。
Light Wave Template – Bootstrap Transparent ThemeDesign Bootstrap | Design Bootstrap
Bootstrapなので、何もしなくてもiPhoneやらタブレットやらでもきれいに表示されるのですが、 YouTubeの動画をiframeで埋め込んだらスマホでは見事にはみ出したので、とりあえずはみ出ないように。。。
<div class="youtube-box"> <iframe width="560" height="315" class="youtube" src="https://www.youtube.com/embed/hogehoge" frameborder="0" allowfullscreen></iframe> </div>
.youtube { max-width: 98%; } .youtube-box { width: 100%; text-align: center; }