yky
|
|
1 | |
Как проверить наличие доступа к документу?07.09.2010, 09:56. Показов 27856. Ответов 16
Метки нет (Все метки)
Суть задачи:
Есть документ обрабатываемый на сервере. Есть пользователь у которого есть ЛотусИмя. Необхимо проверить есть ли у данного пользователя доступ к документу. Доступ может быть предоставлен как напрямую, так и через роли и группы.?Так как у групп может быть большая вложенность и этих групп ну очень дофига, то просто равернуть все группы и посмотреть есть ли он там не представляется возможным в разумные сроки. |
07.09.2010, 09:56 | |
Ответы с готовыми решениями:
16
Нет доступа к текстовому документу Разграничение прав доступа к XML-документу Отсутствие Доступа К Документу При Открытии В Web Наличие в Я. как проверить? |
0 / 0 / 0
Регистрация: 17.12.2008
Сообщений: 420
|
|
07.09.2010, 11:16 | 2 |
А Вам программно надо?
Если нет, то ACL -> Effective Access...
0
|
yky
|
|
07.09.2010, 11:27 | 3 |
Программно. На сервере.
|
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
|
|
07.09.2010, 11:29 | 4 |
Сообщение от alik86
Кстати, а никто не в курсе, есть ли апишная функция, возвращающая список групп/ролей выбранного пользователя (аналогично @UserNameList, но не для текущего, а для выбранного пользователя).
0
|
0 / 0 / 0
Регистрация: 17.12.2008
Сообщений: 420
|
|
07.09.2010, 11:55 | 5 |
Сообщение от nvy
0
|
0 / 0 / 0
Регистрация: 08.08.2009
Сообщений: 178
|
|
07.09.2010, 12:19 | 6 |
А почему вы решили, что си-апишная функция, если такая есть, будет сильно быстрее работать, чем скрипт, что вы напишите?
Тем более, что если вам нужно массово проверять права к документам, то вы можете закэшировать состав групп и раскрытый состав содержимого ACL.
0
|
yky
|
|
07.09.2010, 13:04 | 7 |
Потому что API-шная функция поидее должна взять документ, взять учетку юзера по ЛН имени и сделать проверку могу/не могу открыть (редактировать) и вернуть Да/Нет , а если я напишу скрипт, то это будет что-то вроде.
1. Смотирм доступ к базе 2. Бежим по всем полям собираем все поля типа Автор/Ридер. Делаем список имен 3. Вытаскиваем все роли и группы 4. разворачиваем роли Добавляем имена в список имен. Добавляем группы в список групп. 5. Берем полученные группы. Лезем в Names.nsf и смотрим всех юзеров которых они содержат. Добавляем в список. 6. Смотрим входит ли юзер в полученный гигантский список. 7. Возвращаем Да/нет А кажется мне что этот механизм должен быть и должен работать быстро потмоу, что скажем в Ytria ScanEZ такой механизм есть и он работает быстро ( когда мы пытаемся получить документ по UNIDу к которому у нас нет прав он сразу пишет что недостаточно прав. Причем именно недостаточно прав, а не документ не найден. Если документа нет, то ошибка будет другая) ps. прошу не комментировать данный алгоритм так как я его не продумывал, и надеюсь что не придеца, а просто набросал. |
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
|
|
07.09.2010, 13:18 | 8 |
0
|
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
|
|
07.09.2010, 14:51 | 9 |
странные вы люди однако :unsure:
на документ если убрать все условности есть только два вида доступа: 1) Могу видеть 2) Могу менять вот от этого и пляшите, а то начинают тут роли, группы вспоминать ;)
0
|
yky
|
|
07.09.2010, 15:07 | 10 |
2 nvy. Спасибо. Я до того как напистаь этот пост внимателньо изучил Хелп по Lotus С API.
Увы нашел только Function W32_NSFNoteGetInfo Lib "nnotes.dll" которым можно проверить наличие доступа для текущего юзера. У меня же обработка на серваке. 2 ToxaRat. Проблема опять же в том что обработка на сервере, который точно может видеть и менять док, а мне надо проверить для юзера. Так что увы попробовать открыть/поменять док и потом обработать полученную ошибку не получица. PS Для решения моей задачи мне собственно нужна проверка на наличие Ридерского доступа. |
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
|
|
08.09.2010, 11:47 | 11 |
iki
попробуй через Doc.Lock(
0
|
Tyo
|
|
08.09.2010, 12:45 | 12 |
Сообщение от iki
Можно пытаться сохранить документ и ловить эксепшен. Но, как я понимаю, вы хотите до выполнения долгой операции выяснить удастся ли сохранить результат... |
yky
|
|
08.09.2010, 13:03 | 13 |
2 Toxa. Увы по корпоративным стандартам в базах стоит IsDocumentLockingEnabled = False
2 Tia. Проблемма не в том что на серваке нет nnotes.dll. Проблемма в том что текущий юзер - Сервер, а функция проверяет наличие доступа для текущего юзера (получится что для сервера у которого точно есть доступ). Опять же ловить эксепшен не получица по той же причине. Сама задача: есть документ который юзер должен обработать (какие-нить договора и прочая лабуда). к нему есть взаимосвязные документы (всякая инфа, опять же договораи проч.) к которым у юзера возможно нет доступа. Перед тем как отправить юзеру оповещение о необходимости обработать документ сервер должен проверить есль ли у юзера доступ ко всем взаимосвязям и если нет выполнить некоторые _сложные_ действия по предоставлению доступа к конкретным документам. Предоставлять всегда и ко всем - не вариант. |
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
|
|
08.09.2010, 13:10 | 14 |
Может упростить эти _сложные_ действия, а не искать костыль?
Создай копии этих документов. Пусть их обрабатывает.
0
|
yky
|
|
08.09.2010, 13:43 | 15 |
В процесс предоставления доступа вовлечены специально обученные люди которые оценивают необходимость предоставления. Упростить не получится.
Про копии не понял |
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
|
|
08.09.2010, 13:53 | 16 |
Сообщение от iki
0
|
0 / 0 / 0
Регистрация: 08.08.2009
Сообщений: 178
|
|
08.09.2010, 14:12 | 17 |
Сообщение от iki
Что впрочем и вам советую делать. То есть. 1. Получение всех групп, в которые входит пользователь. Получили список имен и групп, через которые пользователь получает доступ к базам. 2. Получение текущего доступа к текущей базе и всех ролей пользователя через QueryAccessPrivileges и QueryAccessRoles. Получили список всех имен, групп и ролей, через которые пользователь может получить доступ к документам в базе. 3. Получение списка людей, групп и ролей, имеющих доступ к документу 4. Ищем пересечение этих списка доступа к документу и списка имен, групп и ролей в базе данного пользователя. Для быстроты сравнения имеет смысл отсортировать список имен, групп и ролей и хранить список доступа к документу тоже отсортированным. Тогда можно написать довольно быструю функцию сравнения двух отсортированных списков. Если вас беспокоит большая вложенность групп, то можно предварительно агентом для каждого пользователя создать документ со списком группы, в которые он входит.
0
|
08.09.2010, 14:12 | |
08.09.2010, 14:12 | |
Помогаю со студенческими работами здесь
17
Как проверить наличие записи в бд? Как проверить наличие файла Как проверить наличие бана? Как проверить наличие архива Как проверить наличие антивируса? Как проверить элемент на наличие? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |