Динамические роли в разрешениях схемы
вариант использования
Все наши роли в icCube дают доступ только к одной клиентской схеме. Пользователь может иметь только одну роль. Однако некоторым пользователям я бы хотел предоставить доступ и к ДЕМО-домену, в зависимости от их электронной почты.
моя попытка
Учитывая, что ДЕМО-домен называется «Продажи (Демо)», я пытаюсь добавить в каждую роль пользователя следующий код:
-- Give access to the client domain
+ <specific client domain>
+schema [Sales (Demo)]
:schema [Sales (Demo)]
create function isAbc(username_) as instr(username_,'@') > 0 and mid(username_,instr(username_,'@'),100)= '@abc.com'
#IF isAbc(username())
+cube R Sales
#ELSE
-all
#ENDIF
в результате возникает ошибка, почему?
Этот код прерывается из-за ошибки в загруженных схемах:
[ROLES_UNEXPECTED_ERROR] isAbc() : [OLAP_MDX_FUNCTION_UNRESOLVED] isAbc() : the function (isAbc) does not exist location:
отладка в MDX IDE
Когда я тестирую функцию в MDX IDE, кажется, она работает:
with
function isAbc(username_) as instr(username_,'@') > 0 and mid(username_,instr(username_,'@'),100)= '@abc.com'
member measures.a as isAbc('aturing@abc.com')
member measures.b as isAbc('pstolk@google.com')
member measures.c as isAbc('admin')
select {a,b,c} on 0
from sales
Результат:
Что мне не хватает?
1 ответ
Похоже на функциюisAbc()
не может использоваться в операторах предварительной обработки. Более вероятно, что эти операторы предварительной обработки сначала оцениваются, чтобы извлечь фактический список операторов, которые необходимо выполнить для определения разрешений.
В качестве обходного пути вам нужно будет написать код функции внутри#IF
заявление:
#IF instr(username(),'@') > 0 and mid(username(),instr(username(),'@'),100)= '@abc.com'
...
#ENDIF