kintoneの一覧に組織やユーザーごとのアクセス権付与

こんにちは。インベストメントエバンジェリストの武井です。

(2016/10/24現在)
日経平均が心理的節目の17200円を上抜きましたね。

国内外要因から来るセンチメント改善と外国人投資家の買いが入った影響か、
ダントツで割安になっている不動産業種株の見直し買いが頓に始まった気配があります。

取り分け旅館業法見直しによる民泊中古マンション再生がメインテーマとなる――これらは相乗効果すら生む――と考え、
なかんづく業績好調のムゲンエステート<3299>スターマイカ<3230>を買い付けた武井です。

どちらも最高益を更新し続ける成長企業でありながら、
ムゲンエステートはPER4倍台と全市場でもトップクラスの低PER銘柄であり、
スターマイカは一部上場期待銘柄でもあります。

さて、これらと同様に高いテーマ性を持つクラウドアプリkintone。

今回は、サイボウズデベロッパーネットワークでもしばしば話題にのぼる、
「一覧にアクセス権限をつける」件について語らいたいと思います。

結論:無理

できません。

なんで?

kintoneの標準でそのような機能を提供していないためです。

なんとかしろ

完璧な権限は恐らく不可能です。

ただ、ユーザーや所属組織によって一覧に対してアクセスさせないように努力する方法であれば鬼カスタマイズによって可能と思われます。
ここではその例をいくつかご紹介します。

例1:ビュー一覧から消す

権限によってビュー一覧の中身の表示/非表示を切り替える戦法です。

準備

以下の一覧を作ります。

  1. 「ランディングビュー」(カスタマイズビュー・デフォルトビュー)
  2. 「短期売買銘柄」(「インベスター」組織に所属するユーザーだけが閲覧可能な一覧)
  3. 「長期保有銘柄」(Administratorユーザーだけが閲覧可能な一覧)

以下の組織を作成します。

  • 組織名「インベスター」・組織コード「investor」
  • この組織にユーザー「takei」を所属させる

以下のJavaScriptファイルをアップします。

(function () {
	"use strict";

	kintone.events.on(['app.record.index.show'], function (event) {
		// 【全員権限】誰であっても「すべて」ビューは非表示
		var interval1 = setInterval(function () {
			if ($('.gaia-argoui-menuitem:contains("すべて")').length > 0) {
				clearInterval(interval1);
				$('.gaia-argoui-menuitem:contains("すべて")').parent().remove();
			}
		}, 300);
		// 【ユーザー権限】Administrator以外は「長期保有銘柄」ビューを非表示
		var interval2 = setInterval(function () {
			var code = kintone.getLoginUser().code;
			if ($('.gaia-argoui-menuitem:contains("長期保有銘柄")').length > 0 && code !== "Administrator") {
				clearInterval(interval2);
				$('.gaia-argoui-menuitem:contains("長期保有銘柄")').parent().remove();
			}
		}, 300);
		// 【組織権限】「インベスター」組織に所属していない者は「短期売買銘柄」ビューを非表示
		kintone.api('/v1/user/organizations', 'GET', {code: kintone.getLoginUser()['code']}, function (respOrg) {
			var orgs = respOrg;
			var findFlg = false;
			// 自分の組織が「インベスター」(組織コード:investor)かどうかループ
			for (var i = 0; i < orgs.organizationTitles.length; i++) {
				if (orgs.organizationTitles[i].organization.code === "investor") {
					findFlg = true;
					break;
				}
			}
			// インベスター組織に所属していない場合「短期売買銘柄」ビューを非表示にする
			if (!findFlg) {
				var interval3 = setInterval(function () {
					if ($('.gaia-argoui-menuitem:contains("短期売買銘柄")').length > 0) {
						clearInterval(interval3);
						$('.gaia-argoui-menuitem:contains("短期売買銘柄")').parent().remove();
					}
				}, 300);
			}
		});

		return event;
	});

})();

こうすると、各ユーザーによって以下のような挙動になります。

investor1

ご覧の通り、石井さんアカウントでログインしてもランディングビューしか見ることができませんが、
Administratorアカウントだと長期保有銘柄ビューが閲覧可能で、
「インベスター」組織に所属しているtakeiアカウントだと「短期売買銘柄」ビューが閲覧可能になっています。

例2:アクセス後に表示をさせない

上記例はランディングビューから制御したい場合の作りです。(事前制御)

例2では、アクセスしたページそれぞれで制御します。(事後制御)

準備は例1と同様です。

短期売買銘柄のviewIdは「5399872」、
長期保有銘柄のviewIdは「5399875」とします。

また、JavaScriptを以下のように変更します。

(function () {
	"use strict";

	kintone.events.on(['app.record.index.show'], function (event) {
		// 【全員権限】誰であっても「すべて」ビューは非表示
		if (event.viewId === 20) {
			$(".contents-gaia.app-index-contents-gaia").css("display", "none");
		}
		// 【ユーザー権限】Administrator以外は「長期保有銘柄」ビューを非表示
		var code = kintone.getLoginUser().code;
		if (event.viewId === 5399875 && code !== "Administrator") {
			$(".contents-gaia.app-index-contents-gaia").css("display", "none");
		}
		// 【組織権限】「インベスター」組織に所属していない者は「短期売買銘柄」ビューを非表示
		kintone.api('/v1/user/organizations', 'GET', {code: kintone.getLoginUser()['code']}, function (respOrg) {
			var orgs = respOrg;
			var findFlg = false;
			// 自分の組織が「インベスター」(組織コード:investor)かどうかループ
			for (var i = 0; i < orgs.organizationTitles.length; i++) {
				if (orgs.organizationTitles[i].organization.code === "investor") {
					findFlg = true;
					break;
				}
			}
			// インベスター組織に所属していない場合「短期売買銘柄」ビューを非表示にする
			if (event.viewId === 5399872 && !findFlg) {
				$(".contents-gaia.app-index-contents-gaia").css("display", "none");
			}
		});

		return event;
	});

})();

すると、以下のような挙動になります。

investor2

どのアカウントでもすべてのビューを選択すること自体は可能ですが、
石井取締役アカウントではどのビューでもレコードが閲覧不可能で、
Administratorアカウントだと長期保有銘柄ビューでのみレコード閲覧可能、
「インベスター」組織に所属しているtakeiアカウントだと「短期売買銘柄」ビューでのみレコード閲覧可能になっています。

最良の帰趨とは

やはり一覧の権限は標準機能でつけていただきたいと思います。
必要不可欠な基本的機能だと思いますし、
kintone SI経験から言ってもこの手の引き合いは多かったです。

UI的には一覧の設定欄に、アプリやレコードのアクセス権と同様のものをつけるだけなので、
そこまで難しくないんじゃないかと個人的には思っており、
実装される日も近いのではないかと考えています。


▼複数製品も同時に無料お試し!▼