アクセス権の設定表示(スペースのアクセス権取得を追加var)
kintoneをもっと便利にしてくれるブックマークレットの活用
上記の記事を元に、ChatGPTくんと一緒にスペースのアクセス権も表示してくれるようの改良しました。
ただ、どうも長過ぎるようで、ブックマークレットにうまく変換はできず。とりあえずブラウザのコンソールから実行できるものです。
アクセス権の設定表示(スペースのアクセス権取得を追加var)
(async () => {
'use strict';
try {
const appId = kintone.app.getId();
// 各アクセス権の取得
const appResponse = await kintone.api(kintone.api.url('/k/v1/app/acl', true), 'GET', { "app": appId });
const recordResponse = await kintone.api(kintone.api.url('/k/v1/record/acl', true), 'GET', { "app": appId });
const fieldResponse = await kintone.api(kintone.api.url('/k/v1/field/acl', true), 'GET', { "app": appId });
// アプリの情報を取得してスペースIDを確認
const appInfo = await kintone.api(kintone.api.url('/k/v1/app', true), 'GET', { "id": appId });
const spaceId = appInfo.spaceId;
let spaceInfo = null;
let spaceMembersResponse = null;
if (spaceId) {
// スペースの情報を取得
spaceInfo = await kintone.api(kintone.api.url('/k/v1/space', true), 'GET', { "id": spaceId });
// スペースのメンバー情報を取得
spaceMembersResponse = await kintone.api(kintone.api.url('/k/v1/space/members', true), 'GET', { "id": spaceId });
}
// 結果を格納するためのHTMLコンテンツを構築
let content = `<title>アクセス権設定</title>
<body style="font-family: sans-serif; background-color: #f9f9f9; padding: 20px;">
<h3 id="top" style="color: #333;">アクセス権設定(アプリID:${appId})</h3>
<a href="#appAcl">アプリのアクセス権</a> | <a href="#recordAcl">レコードのアクセス権</a> | <a href="#fieldAcl">フィールドのアクセス権</a>`;
if (spaceInfo && spaceMembersResponse) {
content += ` | <a href="#spaceAcl">スペースのアクセス権</a>`;
}
content += `<style>
body { background-color: #f9f9f9; }
table { width: 100%; border-collapse: collapse; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4B4B4B; color: white; }
tr:nth-child(even){background-color: #f2f2f2;}
tr:hover {background-color: #ddd;}
.yes { background-color: rgba(200, 230, 201, 0.6); }
.no { background-color: rgba(255, 205, 210, 0.6); }
</style>`;
// アプリのアクセス権のHTMLテーブルを構築
content += `<div id="appAcl">${buildAppAclTable('アプリのアクセス権', appResponse.rights)}<a href="#top">TOPへ</a></div>`;
content += `<div id="recordAcl">${buildRecordAclTable('レコードのアクセス権', recordResponse.rights)}<a href="#top">TOPへ</a></div>`;
content += `<div id="fieldAcl">${buildFieldAclTable('フィールドのアクセス権', fieldResponse.rights)}<a href="#top">TOPへ</a></div>`;
// スペースの情報とアクセス権のHTMLテーブルを構築(スペースがある場合)
if (spaceInfo && spaceMembersResponse) {
content += `<div id="spaceAcl"><h4>スペース情報(スペースID:${spaceId} スペース名:${spaceInfo.name})</h4>`;
content += `${buildSpaceAclTable('スペースのアクセス権', spaceMembersResponse.members)}<a href="#top">TOPへ</a></div>`;
}
content += '<a href="."> << 前の画面に戻る<a></p></br></body>';
content += '</body>';
// 結果を画面に表示
document.body.innerHTML = content;
} catch (error) {
console.error("エラーが発生しました: ", error);
window.alert('エラーが発生しました: ' + error.message);
}
// アプリのアクセス権のテーブルを構築する関数
function buildAppAclTable(title, rights) {
let table = `<h4>${title}</h4><table><tr><th>ID</th><th>対象/コード</th><th>レコード閲覧</th><th>レコード追加</th><th>レコード編集</th><th>レコード削除</th><th>アプリ管理</th><th>ファイル読み込み</th><th>ファイル書き出し</th><th>アクセス権の継承</th></tr>`;
rights.forEach((right, index) => {
table += `<tr>
<td>${index + 1}</td>
<td>${right.entity.type} / ${right.entity.code}</td>
<td class="${right.recordViewable ? 'yes' : 'no'}">${right.recordViewable ? 'あり' : 'なし'}</td>
<td class="${right.recordAddable ? 'yes' : 'no'}">${right.recordAddable ? 'あり' : 'なし'}</td>
<td class="${right.recordEditable ? 'yes' : 'no'}">${right.recordEditable ? 'あり' : 'なし'}</td>
<td class="${right.recordDeletable ? 'yes' : 'no'}">${right.recordDeletable ? 'あり' : 'なし'}</td>
<td class="${right.appEditable ? 'yes' : 'no'}">${right.appEditable ? 'あり' : 'なし'}</td>
<td class="${right.recordImportable ? 'yes' : 'no'}">${right.recordImportable ? 'あり' : 'なし'}</td>
<td class="${right.recordExportable ? 'yes' : 'no'}">${right.recordExportable ? 'あり' : 'なし'}</td>
<td>${displayInheritance(right.entity.type, right.includeSubs)}</td>
</tr>`;
});
table += `</table></br>`;
return table;
}
// レコードのアクセス権のテーブルを構築する関数
function buildRecordAclTable(title, rights) {
let table = `<h4>${title}</h4><table><tr><th>ID</th><th>条件</th><th>対象/コード</th><th>閲覧</th><th>編集</th><th>削除</th><th>アクセス権の継承</th></tr>`;
rights.forEach((right, index) => {
right.entities.forEach((entity, entityIndex) => {
table += `<tr>
<td>${index + 1}.${entityIndex + 1}</td>
<td>${right.filterCond || 'なし'}</td>
<td>${entity.entity.type} / ${entity.entity.code}</td>
<td class="${entity.viewable ? 'yes' : 'no'}">${entity.viewable ? 'あり' : 'なし'}</td>
<td class="${entity.editable ? 'yes' : 'no'}">${entity.editable ? 'あり' : 'なし'}</td>
<td class="${entity.deletable ? 'yes' : 'no'}">${entity.deletable ? 'あり' : 'なし'}</td>
<td>${displayInheritance(entity.entity.type, entity.includeSubs)}</td>
</tr>`;
});
});
table += `</table></br>`;
return table;
}
// フィールドのアクセス権のテーブルを構築する関数
function buildFieldAclTable(title, fields) {
let table = `<h4>${title}</h4><table><tr><th>フィールドコード</th><th>対象/コード</th><th>閲覧</th><th>編集</th><th>アクセス権の継承</th></tr>`;
fields.forEach(field => {
field.entities.forEach(entity => {
table += `<tr>
<td>${field.code}</td>
<td>${entity.entity.type} / ${entity.entity.code}</td>
<td class="${entity.accessibility === 'READ' ? 'yes' : 'no'}">${entity.accessibility === 'READ' ? 'あり' : 'なし'}</td>
<td class="${entity.accessibility === 'WRITE' ? 'yes' : 'no'}">${entity.accessibility === 'WRITE' ? 'あり' : 'なし'}</td>
<td>${displayInheritance(entity.entity.type, entity.includeSubs)}</td>
</tr>`;
});
});
table += `</table></br>`;
return table;
}
// アクセス権の継承表示を処理する関数
function displayInheritance(entityType, includeSubs) {
if (entityType === 'ORGANIZATION') {
return includeSubs ? 'あり' : 'なし';
}
return '-';
}
// スペースのアクセス権のテーブルを構築する関数
function buildSpaceAclTable(title, members) {
// メンバーをソート
members.sort((a, b) => {
if (a.entity.type !== b.entity.type) {
return a.entity.type.localeCompare(b.entity.type);
}
return (b.isAdmin === true) - (a.isAdmin === true);
});
let table = `<h4>${title}</h4><table><tr><th>ユーザー名</th><th>メンバーの種類</th><th>メンバーのコード</th><th>スペース管理者</th><th>アクセス権の継承</th></tr>`;
members.forEach((member, index) => {
table += `<tr>
<td>${member.entity.code}</td>
<td>${member.entity.type}</td>
<td>${member.entity.code}</td>
<td class="${member.isAdmin ? 'yes' : 'no'}">${member.isAdmin ? 'あり' : 'なし'}</td>
<td class="${member.includeSubs ? 'yes' : 'no'}">${member.includeSubs ? 'あり' : 'なし'}</td>
</tr>`;
});
table += `</table></br>`;
return table;
}
})();
この記事が気に入ったらサポートをしてみませんか?