UIB: Data ResourceのAggregation Queryでの集計について

SatoruS
Tera Expert

こんにちは。

UI BuilderのData Resourceにある「Aggregation Query」で承認テーブルやTaskテーブルの件数を取得する定義を
しています。

しかし、adminロール持っている場合は、エラーにはならないのですが、以下のように権限によって結果が変わります。

 

一般利用者の場合

・承認テーブルの件数:OK  --> NG (itilロール持っているとOKで、外すとNGでした)

・Taskテーブルの件数:NG

 

委任開発者権限がある場合

・承認テーブルの件数:NG

・Taskテーブルの件数:NG

 

 

SatoruS_1-1750661051159.png


OK/NGの判断は、Eventsの設定で通知を表示させました。

SatoruS_2-1750661100019.png

 

関係ないかもしれませんが、以下のACLを定義しても結果は変わりませんでした。

SatoruS_3-1750661242132.png


別途、定義しないと利用できないのでしょうか?
環境は、Xanadu P7b, Yokohama P3ともに発生しています。

なお、syslogに以下のメッセージが表示されていましたが、対処方法が分からず困っております。
GraphQL API - GlideGraphQL : Query: Exception encountered processing field: GlideAggregate_Query - Insufficient rights to query records: com.glide.graphql.GlideGraphQLException: Query: Exception encountered processing field: GlideAggregate_Query - Insufficient rights to query records: com.glide.graphql.GlideGraphQLException$Builder.build(GlideGraphQLException.java:120)
com.glide.graphql.datasources.glideaggregate.fetchers.GlideAggregateDataFetcher.get(GlideAggregateDataFetcher.java:89)
com.glide.graphql.datasources.glideaggregate.fetchers.GlideAggregateListDataFetcher.get(GlideAggregateListDataFetcher.java:17)
com.glide.graphql.datasources.glideaggregate.fetchers.GlideAggregateListDataFetcher.get(GlideAggregateListDataFetcher.java:9)
com.glide.graphql.impl.security.SecurityDataFetcher.get(SecurityDataFetcher.java:37)
com.glide.graphql.fetchers.GraphQLTransactionCancelledFetcher.get(GraphQLTransactionCancelledFetcher.java:26)
graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentation.lambda$instrumentDataFetcher$0(DataLoaderDispatcherInstrumentation.java:93)
com.glide.graphql.impl.security.paths.PathSecurityDataFetcher.get(PathSecurityDataFetcher.java:32)
graphql.execution.instrumentation.dataloader.FallbackDataLoaderDispatchStrategy.lambda$modifyDataFetcher$0(FallbackDataLoaderDispatchStrategy.java:25)
graphql.execution.ExecutionStrategy.invokeDataFetcher(ExecutionStrategy.java:544)
graphql.execution.ExecutionStrategy.fetchField(ExecutionStrategy.java:508)
graphql.execution.ExecutionStrategy.fetchField(ExecutionStrategy.java:449)
graphql.execution.streaming.StreamingExecutionStrategy.fetchField(StreamingExecutionStrategy.java:45)
以下、省略

1件の返信1

SatoruS
Tera Expert

本件、対象テーブルの全レコードに対してread権限を持っている場合は、正常に取得できるようです。

ただし、全レコードにread権限を付与するのは問題があるので、回避策として独自のData Broker Server Script(transform)を作成することにしました。

function transform(input) {
    const table = input.table;
    const encodedQuery = input.encodedQuery;
	var gr = new GlideRecord(table);
	gr.addEncodedQuery(encodedQuery);
	gr.query();
	var count = gr.getRowCount();
	return {
		count: count
	};
	
}