0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ServiceNow】ACL拒否時のエラー表示について【Workspace】

0
Last updated at Posted at 2026-03-14

追記(2026/4/25)

Patchが当たったのかWorkspaceでもACL拒否時のエラーが表示されるようになっていました。

追記(2026/3/14)

PDIで触っていると上記の処理ではHeading 1コンポーネントのラベルがちらつくことが分かりました。
他の方法が分かったらまた修正致します。

はじめに

WorkspaceでACL拒否された時に白いページが出るのでその対処方法を調べました。

PDI環境

試したPDI環境はこんな感じです。
Version: Zurich
image.png

検証

この記事で作成したワークスペースを使って検証します。
まずはテスト用のユーザーを作成します。
新しくtest.taroさんを作成します。
image.png

この時点でまだワークスペースのロールは付与せずにいます。
ユーザーが作成出来たらなりすますしをして、ワークスペースにアクセスしてみます。
image.png

ロールを付与していない状態だとSecurity constraints prevent access to requested pageという権限エラーが表示されます。
image.png

次にロールを付与し、ACLで拒否してみます。
まずはワークスペースの一般ロールをtest.taroさんに付与します。
image.png

Workspace側にAudience設定をしていなかったのでそれも作成します。
image.png

LogTestApp用の一般ユーザーロールとadminロールをAudienceに登録します。
image.png

この設定でワークスペースの一般ロールを付与されているtest.taroさんでもを見ることが出来るようになります。
image.png

次にACLの設定をしたいのでsecurity_adminに昇格します。
image.png

ここでは標準で作成された一般ロールユーザー用のACLにPriority:1-Critical以外のデータであればアクセス可能となる設定を追加します。
image.png

現状のACLは以下のようになります。

Priority x_1603370_logtes_0_user x_1603370_logtes_0_admin
1 - Critical ❌ 参照不可 ⭕ 参照可能
2 - High ⭕ 参照可能 ⭕ 参照可能
3 - Moderate ⭕ 参照可能 ⭕ 参照可能
4 - Low ⭕ 参照可能 ⭕ 参照可能
5 - Planning ⭕ 参照可能 ⭕ 参照可能

検証用に各Priorityの値を変えたレコードを作成しておきます。
image.png

test.taroさんになりすましをしてワークスペースにアクセスします。
https://dev202820.service-now.com/x/1603370/logtestapp/record/x_1603370_logtes_0_logtesttable/7454246a83753e10678dfbb6feaad36c

Listを見ると全体5件ですが、ACLによってPriority:1-Criticalのレコードは参照できないので4件のみ表示されています。
image.png

直接Priority:1-CriticalのレコードURLをブラウザにペーストしてアクセスするとロールを持たない時のようにアクセス拒否の画像やメッセージが出てほしいのですが、以下のように真っ白な画面だけ表示されます。
今回はこの真っ白なページに何らかの画像やメッセージを表示できるようにしていきたいと思います。
image.png

ちなみにPlatform側のURLで該当のレコードにアクセスするとロールを持っていない時と同じような表示がされます。
image.png

ACL失敗時にメッセージを表示する

標準的な方法でやりたかったのですが調べてもよくわからず、とりあえず実現出来た方法を1つ紹介します。
今回は検証してないですが、UIBuilderのeventを組み合わせればポップアップとかも出せるかもしれません。

1.Security constraintsコンポーネントを修正する

Workspace作成時、RecordのPageにWarning Messages Containerが自動で作成されているのですが、
これがうまく動いていないのか良くわからないですが、Security constraints prevent access to requested pageというロールを持っていない時に表示されるメッセージのラベルがあります。
image.png

Component Visibilityで普段はHideされているようなので、ACL却下時にこれを表示してあげればいいのかなと考えました。というか表示されていないのがおかしい?よくわかりません。
image.png

中の条件を見てみるとなんとなく以下のような条件で表示/非表示が切り替えられているようです。

パターン isValid canRead 式の結果 コンポーネントの状態
① ロード中 / 空 null (不問) True 非表示 (Hidden)
② 無効なデータ false (不問) True 非表示 (Hidden)
③ 権限あり true true True 非表示 (Hidden)
④ 権限なし true false False 表示 (Visible)

何故これでACLが拒否された時に表示されないのかわかりませんが、仕方ないので一つ条件を追加します。
|| ((@data.record.isValid == true) && (@data.record.acl.canRead == false))

全体の条件にORを追加し、isValid==trueかつcanRead==falseの時に表示します。
image.png

これでsaveして、test.taroさんになりすまし、アクセスできないレコードを開いてみます。
まだ真っ白です。
image.png

saveした条件を見てみると、思っていた感じになっていないようです。
image.png

元の条件と追加した条件がどちらもFalseにならないと表示されないになっていました。

(((((@data.record.isValid != true) && (@data.record.isValid != false)) || (@data.record.isValid == false)) || ((@data.record.isValid == true) && (@data.record.acl.canRead == true))) || ((@data.record.isValid == true) && (@data.record.acl.canRead == false)))

仕方がないのでコンポーネントをもう一つ増やして対応します。
Security constraintsコンポーネントをDuplicateで複製します。
image.png

Heading 1というコンポーネントが出来るので、その条件をシンプルにcanReadだけにします。
image.png

これでsaveして、test.taroさんになりすまし、アクセスできないレコードを開いてみます。
Heading 1コンポーネントのラベルが出ました。
image.png

真っ白になっているのはZurichのバグ?なのでしょうか。
一応、これでメッセージとかは表示できそうです。
画像も同じようにコンポーネント条件で付けてあげれば、ロールがない時に表示される状態と同じ表示の仕方が出来ると思います。

終わりに

仕様なのか不具合なのか不明ですが、Workspaceにて権限不足の場合にエラーメッセージを表示する方法を調べました。
標準的にACL不足時はメッセージを出してくれるのだとは思いますが、更にカスタマイズ・ユーザビリティの高い表示をしたい場合は今回の検証が役に立つこともあるかもしれません。
いつかのどなたかの参考になれば幸いです。

参考URL

以下のURLを参考にしました。有益なサイト達に感謝します。

UI Builder のデータリソース

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?