プリザンターでサイトのアクセス制御の設定を一覧で確認できるページを作ってみた!

IISではプリザンターの様々な機能や、スクリプトなどによる機能拡張を行っています。

今回は、独自にサイトのアクセス制御を確認するページを追加してみました。

独自にページを増やすことでできること

独自にページを増やすことで、そもそもWebアプリとして難しい事を除いて概ね何でもできます。 例えば次のユースケースなども実現できます。

  • テーブルの設定を一覧表示やグラフ表示したい
  • エディタの設定を一覧表示やグラフ表示したい
  • アクセス制御の設定を一覧表示やグラフ表示したい
  • データの登録件数や状況のサマリーを一覧表示やグラフ表示したい
  • プリザンターの使われ方を分析したい

今回は三番目の アクセス制御の設定を一覧表示したい をかなえるページをざっと作ってみました。
※ページは研究途中のもので今後より使いやすくして行きます。

アクセス制御確認ページ

今回追加してみたページの見た目です。
f:id:imageinformationsystem:20181129101128j:plain

アクセス制御は頑張ればワークフローに近い使い勝手のサイトも使える強力な機能です。しかし複雑な機能を実現しようとするとトライアンドエラーで非常に手間のかかる機能です。少なくとも私はとても時間をかけています。
ここで設定が実際どうなっているのか一覧できると捗りそう。そう思って今回のページを作ってみました。

サイトのアクセス制御

テーブルの設定の「サイトのアクセス制御」タブで行った設定の結果を一覧表示しています。
f:id:imageinformationsystem:20181129101155j:plain

このタブで行った設定は、データベースの Permissions テーブルに格納されますが、その定義は

カラム名 キー
ReferenceId bigint NOT NULL PRIMARY KEY
DeptId int NOT NULL PRIMARY KEY
GroupId int NOT NULL PRIMARY KEY
UserId int] NOT NULL PRIMARY KEY
PermissionType bigint NOT NULL

となっています。画面の設定そのままですが、実際にどのユーザーがどのように権限を持つかは少々頑張らなければ確認できません。

設定パターン 頑張り方
[組織]を設定した場合 [組織] -> [ユーザーの所属組織] -> [ユーザー]
[グループ]を設定した場合その1 [グループ] -> [グループの所属メンバー] -> [ユーザー]
[グループ]を設定した場合その2 [グループ] -> [グループの所属メンバー] -> [組織] -> [ユーザーの所属組織] -> [ユーザー]
[ユーザー]を設定した場合 [ユーザー]

といった紐づけをたどって確認する必要があります。
SQLでは8つのテーブルを外部結合したクエリーを書くことで確認できました。

select *
from Permissions as p
left outer join Depts as d on p.DeptId = d.DeptId
left outer join Groups as g on p.GroupId = g.GroupId
left outer join Users as u on p.UserId = u.UserId
left outer join Users as du on d.DeptId = du.DeptId
left outer join GroupMembers as gm on g.GroupId = gm.GroupId
left outer join Depts as gmd on gm.DeptId = gmd.DeptId
left outer join Users as gmu on gm.UserId = gmu.UserId
left outer join Users as gmdu on gmd.DeptId = gmdu.DeptId

アクセス制御確認ページではこの結果を一覧表形式で表示しています。

項目のアクセス制御

テーブルの設定の「項目のアクセス制御」タブで行った設定の結果を一覧表示しています。
このタブでは、項目毎に作成/表示/更新時にどのユーザーが扱えるかを設定できます。
f:id:imageinformationsystem:20181129101219j:plain
f:id:imageinformationsystem:20181129101245j:plain

このタブで行った設定は、データベースの Sites テーブルの SiteSettings カラムにテーブルに格納されますが、設定はすべてJSONでまとめられ1行1カラムのデータとして格納されます。
JSONなのでサイトのアクセス制御のようにクエリーで頑張る方法はとれないので、プログラムで頑張る必要があります。

今回は、頑張りすぎて一言では表せないロジックになってしまったので、ロジックは省略させてもらいます。
いずれIISの勉強会などで話せたらと思います。

IISの技術力

今回作成したページはIIS固有の技術で独自にプリザンターに機能を追加しています。この固有技術によりプリザンター自体に手を加えることなくページを追加することが可能です。

プリザンター自体に手を入れるカスタマイズ手法だとアップデートに度に多くの手間が必要になりますが、IISの技法でなら手間はほとんどかかりません。

今後の野望

今回は軽くいくつかの分析情報を表示しただけですが、今後は

  • テーブルの設定を一覧表示やグラフ表示したい
  • エディタの設定を一覧表示やグラフ表示したい
  • アクセス制御の設定を一覧表示やグラフ表示したい
  • データの登録件数や状況のサマリーを一覧表示やグラフ表示したい
  • プリザンターの使われ方を分析したい
  • テータを独自の画面で登録・編集したい
  • テーブルの設定を独自の画面で編集したい
  • 独自のフォーマットでデータのファイル出力・取込機能をしたい

といった夢をかなえるページを作って、皆様のお役に立てる製品を開発して行きます。

「+読者になる」のお願い

C#によるWebアプリ開発IISの得意とする領域です。今後もプリザンターへのページ追加の研究を進めて行くつもりです。関心のある方、よかったらブログ上部の「+読者になる」をクリックをお願いします!

最後に

IISはプリザンターのカスタマイズの経験が豊富です。
プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!
またご不明点やご質問などございましたら弊社までお問い合わせください。