ユーザー・組織情報の取得
kintone のカスタマイズでは、ログインユーザーの情報を取得して権限判定を行ったり、組織情報を使って動的にフィールドの値を制御したりするケースが多くあります。kintone にはユーザー・組織・グループの情報を取得するための API が複数用意されています。
この記事では、各 API の使い方と実践的な活用パターンを解説します。
ログインユーザーの情報を取得する
JavaScript カスタマイズ内で最もよく使うのが、現在ログインしているユーザーの情報取得です。
kintone.getLoginUser()
最もシンプルな方法です。REST API を使わず、同期的に取得できます。
const loginUser = kintone.getLoginUser();
console.log(loginUser);
// {
// id: "1",
// code: "user01",
// name: "田中 太郎",
// email: "tanaka@example.com",
// url: "",
// employeeNumber: "",
// phone: "",
// mobilePhone: "",
// extensionNumber: "",
// timezone: "Asia/Tokyo",
// isGuest: false,
// language: "ja"
// }
取得できるプロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
id | string | ユーザー ID |
code | string | ログイン名 |
name | string | 表示名 |
email | string | メールアドレス |
timezone | string | タイムゾーン |
isGuest | boolean | ゲストユーザーかどうか |
language | string | 言語設定 |
kintone.getLoginUser()
はすべてのイベントで使用可能で、非同期処理を必要としません。ユーザー情報に基づく条件分岐に最も適したメソッドです。
ログインユーザーに基づくフィールド制御
(() => {
'use strict';
/** 管理者のログイン名リスト */
const ADMIN_USERS = ['admin01', 'admin02', 'manager01'];
kintone.events.on(['app.record.edit.show', 'app.record.create.show'], (event) => {
const loginUser = kintone.getLoginUser();
const isAdmin = ADMIN_USERS.includes(loginUser.code);
// 管理者のみ「管理メモ」フィールドを表示
kintone.app.record.setFieldShown('管理メモ', isAdmin);
// 管理者でない場合は「承認金額」フィールドを入力不可にする
if (!isAdmin) {
event.record['承認金額'].disabled = true;
}
return event;
});
})();
ユーザー一覧を取得する
REST API を使って、kintone 環境内のユーザー一覧を取得できます。
kintone 内から利用する場合
/**
* ユーザー一覧を取得する
* @param { Object } [params]
* @param { string[] } [params.codes] - 取得するユーザーのログイン名の配列
* @param { number } [params.offset] - オフセット
* @param { number } [params.size] - 取得件数(最大100、デフォルト100)
* @returns { Promise<{ users: any[] }> }
*/
const getUsers = (params = {}) => {
const { codes, offset = 0, size = 100 } = params;
const query = new URLSearchParams();
query.set('offset', String(offset));
query.set('size', String(size));
if (codes) {
codes.forEach((code) => query.append('codes[]', code));
}
const url = `/v1/users.json?${query.toString()}`;
return kintone.api(url, 'GET', {});
};
// 使用例: 全ユーザーを取得
getUsers().then((response) => {
console.log('ユーザー一覧:', response.users);
});
ユーザー一覧 API(/v1/users.json)は、cybozu.com 共通管理者または kintone
システム管理者のみ使用できます。一般ユーザーからは実行できない点に注意してください。
全ユーザーを取得する(ページング対応)
ユーザーが 100 人以上の場合は、offset を使ってページング取得する必要があります。
/**
* 全ユーザーを一括取得する
* @returns { Promise<any[]> }
*/
const getAllUsers = async () => {
const allUsers = [];
let offset = 0;
const size = 100;
while (true) {
const response = await kintone.api('/v1/users.json', 'GET', { offset, size });
allUsers.push(...response.users);
if (response.users.length < size) {
break;
}
offset += size;
}
return allUsers;
};
組織一覧を取得する
/**
* 組織一覧を取得する
* @param { Object } [params]
* @param { number } [params.offset] - オフセット
* @param { number } [params.size] - 取得件数(最大100)
* @returns { Promise<{ organizations: any[] }> }
*/
const getOrganizations = (params = {}) => {
const { offset = 0, size = 100 } = params;
return kintone.api('/v1/organizations.json', 'GET', { offset, size });
};
組織に所属するユーザーを取得する
特定の組織に所属するユーザーの一覧を取得する API です。
/**
* 指定した組織に所属するユーザーを取得する
* @param { string } organizationCode - 組織コード
* @param { number } [offset] - オフセット
* @param { number } [size] - 取得件数
* @returns { Promise<{ userTitles: any[] }> }
*/
const getOrganizationUsers = (organizationCode, offset = 0, size = 100) => {
return kintone.api('/v1/organization/users.json', 'GET', {
code: organizationCode,
offset,
size,
});
};
// 使用例
getOrganizationUsers('sales-dept').then((response) => {
response.userTitles.forEach((ut) => {
console.log(`ユーザー: ${ut.user.name}, 役職: ${ut.title?.name || 'なし'}`);
});
});
ユーザーが所属する組織を取得する
/**
* 指定したユーザーが所属する組織を取得する
* @param { string } userCode - ユーザーのログイン名
* @returns { Promise<{ organizationTitles: any[] }> }
*/
const getUserOrganizations = (userCode) => {
return kintone.api('/v1/user/organizations.json', 'GET', { code: userCode });
};
// 使用例: ログインユーザーの所属組織を取得
const loginUser = kintone.getLoginUser();
getUserOrganizations(loginUser.code).then((response) => {
response.organizationTitles.forEach((ot) => {
console.log(`組織: ${ot.organization.name}`);
});
});
グループ一覧を取得する
/**
* グループ一覧を取得する
* @param { Object } [params]
* @param { number } [params.offset] - オフセット
* @param { number } [params.size] - 取得件数
* @returns { Promise<{ groups: any[] }> }
*/
const getGroups = (params = {}) => {
const { offset = 0, size = 100 } = params;
return kintone.api('/v1/groups.json', 'GET', { offset, size });
};
実践例: ユーザー選択フィールドの連動制御
ユーザーが所属する組織に基づいて、ユーザー選択フィールドの初期値を自動設定する例です。
(() => {
'use strict';
kintone.events.on('app.record.create.show', async (event) => {
const loginUser = kintone.getLoginUser();
// ログインユーザーの情報を「申請者」フィールドに自動設定
event.record['申請者'].value = [
{
code: loginUser.code,
name: loginUser.name,
},
];
// ログインユーザーの所属組織を取得して「申請部署」を自動設定
try {
const orgResponse = await kintone.api('/v1/user/organizations.json', 'GET', {
code: loginUser.code,
});
if (orgResponse.organizationTitles.length > 0) {
const primaryOrg = orgResponse.organizationTitles[0].organization;
event.record['申請部署'].value = primaryOrg.name;
}
} catch (error) {
console.error('組織情報の取得に失敗しました:', error);
}
return event;
});
})();
実践例: 権限に応じたボタン表示制御
ログインユーザーの所属するグループに基づいて、管理機能へのアクセスを制御する例です。
(() => {
'use strict';
/**
* ユーザーが指定したグループに所属しているか確認する
* @param { string } userCode - ユーザーのログイン名
* @param { string } targetGroupCode - 確認するグループコード
* @returns { Promise<boolean> }
*/
const isUserInGroup = async (userCode, targetGroupCode) => {
const response = await kintone.api('/v1/user/groups.json', 'GET', {
code: userCode,
});
return response.groups.some((group) => group.code === targetGroupCode);
};
kintone.events.on('app.record.index.show', async (event) => {
const loginUser = kintone.getLoginUser();
// 「管理者グループ」に所属しているか確認
const isAdmin = await isUserInGroup(loginUser.code, 'admin-group');
if (isAdmin) {
const headerSpace = kintone.app.getHeaderMenuSpaceElement();
const adminButton = document.createElement('button');
adminButton.textContent = '管理者メニュー';
adminButton.onclick = () => {
// 管理者限定の処理
window.open('/k/admin/', '_blank');
};
headerSpace.append(adminButton);
}
return event;
});
})();
API 一覧
| API | エンドポイント | 説明 |
|---|---|---|
| ユーザー一覧 | /v1/users.json | ユーザー一覧の取得 |
| 組織一覧 | /v1/organizations.json | 組織一覧の取得 |
| グループ一覧 | /v1/groups.json | グループ一覧の取得 |
| 組織のユーザー | /v1/organization/users.json | 組織に所属するユーザーの取得 |
| ユーザーの組織 | /v1/user/organizations.json | ユーザーが所属する組織の取得 |
| ユーザーのグループ | /v1/user/groups.json | ユーザーが所属するグループの取得 |
これらの API は cybozu.com の User API(管理系 API)です。kintone の REST
API(/k/v1/)とはエンドポイントのパスが異なるため、kintone.api.url
は使用せず、直接パスを指定してください。
まとめ
kintone.getLoginUser()で現在のログインユーザー情報を同期的に取得できる- ユーザー・組織・グループの一覧取得には REST API を使用する
- ユーザー一覧 API はシステム管理者権限が必要
- 100 件を超えるデータを取得する場合は offset によるページング処理が必要
- ログインユーザーの情報を活用して、権限制御やフィールドの初期値設定が実現できる