Обычным способом контроля доступом к документам в Домино, является прописывание readers\Authors полей в самом документе.
Все бы хорошо, но при этом в случае изменения условий предоставления доступа нужно перелопатить все документы со старым доступом и пересчитать права.
Причем совсем не обязательно что когда то оно и понадобится.
Мне это процедура порядком надоела и я задумался над предоставлением доступом "по требованию".
Для этого была использован функционал Домино - когда при недостатке прав\логине вызывается форма, прописанная в domcfg.nsf
При этом в поле reasonType формируется код, по которому можно понять причину вызова этой формы.
На скрине - дефолтовая расшифровка:
ну а далее - дело техники.
Используем вычисляемую подформу с формулой: @If(reasonType="1" & HTTPUser!="Anonymous";"$$LoginAuthorizationFailure" ;"$$LoginUser" )
И там вызываем через ajax агента, которому передаются имя пользователя, запрошенный URL и т.п. для принятия решения о предоставлении доступа.
<script>
$(document).ready(function(){
var d=$('form:first').serialize();
$.ajax({
type: "POST",
url: 'redir?Open',
async: true,
data:d
}).done(function(data) {
$("#content").html(data);
})
});
</script>
В случае, если доступ разрешен - то прописываются нужные поля Readers\Authors и делается reload документа. У меня проверка около десятка критериев занимает ок 250 ms.
Через некоторое время у документа просто вычищаем нужные поля readers\Authors.
Этот финт ушами решил мои проблемы в системе с ок 10 млн документов.
PS - появляющийся транспарант "проверка уровня доступа..." как то дисциплинирует пользователей )))
Все бы хорошо, но при этом в случае изменения условий предоставления доступа нужно перелопатить все документы со старым доступом и пересчитать права.
Причем совсем не обязательно что когда то оно и понадобится.
Мне это процедура порядком надоела и я задумался над предоставлением доступом "по требованию".
Для этого была использован функционал Домино - когда при недостатке прав\логине вызывается форма, прописанная в domcfg.nsf
При этом в поле reasonType формируется код, по которому можно понять причину вызова этой формы.
На скрине - дефолтовая расшифровка:
ну а далее - дело техники.
Используем вычисляемую подформу с формулой: @If(reasonType="1" & HTTPUser!="Anonymous";"$$LoginAuthorizationFailure" ;"$$LoginUser" )
И там вызываем через ajax агента, которому передаются имя пользователя, запрошенный URL и т.п. для принятия решения о предоставлении доступа.
<script>
$(document).ready(function(){
var d=$('form:first').serialize();
$.ajax({
type: "POST",
url: 'redir?Open',
async: true,
data:d
}).done(function(data) {
$("#content").html(data);
})
});
</script>
В случае, если доступ разрешен - то прописываются нужные поля Readers\Authors и делается reload документа. У меня проверка около десятка критериев занимает ок 250 ms.
Через некоторое время у документа просто вычищаем нужные поля readers\Authors.
Этот финт ушами решил мои проблемы в системе с ок 10 млн документов.
PS - появляющийся транспарант "проверка уровня доступа..." как то дисциплинирует пользователей )))