FAQ:一覧表示するレコードを所属組織別に分けたい
回答
拡張SQLの「OnSelectingWhere」を使用してください。
概要
事前に作成した組織・グループ別にレコード一覧画面に表示するレコードを制御します。このページでは本社(組織)に所属するユーザは登録された全てのレコードを閲覧することができ、その他の組織に所属するユーザは同グループ内で登録されたレコードのみを閲覧することができるようになります。
事前準備
(1) システム管理者でログイン後、下記の表を参考に[管理]-[ユーザの管理]、[組織の管理]、[グループの管理]からグループと組織情報を含めたユーザ情報を作成してください。ここでは本社に所属するユーザと各営業店に所属するユーザを想定し、組織とグループを構成します。下記にその構成を表に記載いたします。
ユーザ | 組織 | グループ |
---|---|---|
branch-user1 | 営業店1 | グループ1 |
branch-user2 | 営業店2 | 〃 |
branch-user3 | 営業店3 | グループ2 |
head-user1 | 本社 | - |
(2)[管理]-[テーブルの管理]-[エディタ]より分類Bを任意の表示名にして(ここでは”店番”,わかりやすいように分類Cを”店名”に設定)、[一覧]タブからそれぞれを有効化してください。
(3) 各ユーザでレコードを少なくても一つ作成してください。
(4) 以下のサンプルコード(Sql)の@_Dの値とサンプルコード(JSON)のSiteIdListの値を環境に合わせ、変更してください。
この例では@_Dの値は21,SiteIdListの値は1166になります。
(5) Extensionsテーブルに(3)で作成したサンプルコードとその他の項目を記入してください。
拡張SQLについてはこちらをご確認下さい(/manual/extended-sql)
(6)プリザンダーを再起動してください。
Sql
(
@_U = 1 or @_D = 1 --システム管理者のユーザIDまたは本社組織の組織ID
or [ClassB] in (
select [Depts].[DeptCode]
from [GroupMembers]
left join [Depts]
on Depts.DeptId = GroupMembers.DeptId
and ([GroupMembers].[GroupId] in(
select [GroupId]
from [GroupMembers]
where [DeptId] = @_D))
where [Depts].[DeptCode] is not null)
)
JSON
{
"SiteIdList": [2],
"OnSelectingWhere": true
}
結果
以下のようにユーザ毎に所属するグループまたは組織によって表示(取得)されるレコードが変わります。
・本社ユーザでログインした場合
・営業店2に所属するユーザでログインした場合
・営業店3に所属するユーザでログインした場合
関連情報
- 開発者向け機能:拡張機能:拡張SQL2024/09/13 up