0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
1

Acl и Lotusscript

25.06.2007, 12:21. Показов 27161. Ответов 19
Метки нет (Все метки)

Помогите выловить багу, досталась по наследству.
В общем суть такова, есть документ который может редактировать только юзер с ролью [Admin]
Заколбашена функция проверки, которую я уже тупо упростил до безобразия. Т.е. просто проверяю выведит ли ф-ия список ролей юзера


Код
Function isAdmin
............
Dim acl As NotesACL
Dim aclentry As NotesACLEntry
Set db = ns.CurrentDatabase

Set acl = db.acl
Set aclentry = acl.GetEntry(ns.UserName)

Forall r In aclentryRoles
Messagebox(r)
End Forall

End Function
Я сейчас вырезал все лишнее, хочу что бы функция только выдавала Message ролей у юзера.
Но происходит Object Variable not Set
Где копать уже ума не приложу.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2007, 12:21
Ответы с готовыми решениями:

Lotusscript
Доброго времени суток всем. Возникли некоторые вопросы по ЛС. Вообще он очень похож на бейсик. Но...

Enumeration В Lotusscript
Доброе время суток! Продолжаю скромные попытки расширить возможности разработки на LS. На сей...

Проблема с LotusScript
Такая вот проблема! Как в LotusScript зделать экспорт в файл MS Word содержимого письма? ICQ...

Lotusscript Library
Всем здрасте! Есть у кого-нить наработки как получить перечень процедур из библиотеки?

19
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
25.06.2007, 12:27 2
Копай здесь:
<!--QuoteBegin-LIGHT+26:06:2007, 12:08 -->
<span class="vbquote">(LIGHT @ 26:06:2007, 12:08 )</span><!--QuoteEBegin-->Forall r In aclentryRoles
[snapback]70601" rel="nofollow" target="_blank[/snapback]?[/quote]
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
25.06.2007, 12:30 3
Да, тут и копаю, только уже почти закопался
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
25.06.2007, 12:36 4
aclentryRoles - точка пропущена Forall r In aclentry.Roles
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
25.06.2007, 12:39 5
<!--QuoteBegin-LIGHT+26:06:2007, 12:17 -->
<span class="vbquote">(LIGHT @ 26:06:2007, 12:17 )</span><!--QuoteEBegin-->Да, тут и копаю, только уже почти закопался
[snapback]70604" rel="nofollow" target="_blank[/snapback]?[/quote]
Точку поставить забыл в "aclentryRoles". Найдешь где?

<!--QuoteBegin-LIGHT+26:06:2007, 12:08 -->
<span class="vbquote">(LIGHT @ 26:06:2007, 12:08 )</span><!--QuoteEBegin-->В общем суть такова, есть документ который может редактировать только юзер с ролью [Admin]
[snapback]70601" rel="nofollow" target="_blank[/snapback]?[/quote]
Сделай по-нормальному через поле типа Authors.

А так можно еще через Evaluate сделать:

Код
Dim result As Variant

result = Evaluate({@IsMember("[Admin]"; @UserRoles)})
if result(0) = 1 Then Админ
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
25.06.2007, 13:59 6
А точку я тут забыл поставить, в бивал код кучками. В оригинале она есть.
Другие методы не подходят по ряду причин. Интересует именно почему не работает в такой конструкцие, причем в хелпе есть аналогичный пример.
0
0 / 0 / 0
Регистрация: 27.03.2006
Сообщений: 122
25.06.2007, 14:08 7
Для: LIGHT
опять же - может база локальная?
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
25.06.2007, 14:14 8
Нет база разумеется на сервере
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
25.06.2007, 14:20 9
Для: LIGHT
В какой строке ошибка?
0
0 / 0 / 0
Регистрация: 27.03.2006
Сообщений: 122
25.06.2007, 14:22 10
..в каком месте останавливается хотя бы - так гадать трудно ... может у тебя например ns не инициализированно
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
25.06.2007, 14:28 11
У меня получилось так


Код
    Dim acl As NotesACL
Dim aclentry As NotesACLEntry
Dim session As New NotesSession
Set db=session.CurrentDatabase
Set acl = db.acl
Set aclentry = acl.GetEntry(session.UserName)

Forall r In aclentry.Roles
Messagebox(r)
End Forall
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
25.06.2007, 14:38 12
<!--QuoteBegin-Medevic+26:06:2007, 12:26 -->
<span class="vbquote">(Medevic @ 26:06:2007, 12:26 )</span><!--QuoteEBegin-->Dim result As Variant

result = Evaluate({@IsMember("[Admin]"; @UserRoles)})
if result(0) = 1 Then Админ
[snapback]70606" rel="nofollow" target="_blank[/snapback]?[/quote]

Взял этот пример, работает. Еще не изучил как повлияет на логику остального кода...
Почему не рабоал мой пример фиг знает.
Все переменные инициализированы.... в общем какая-то бяка, дебагер затыкался тут<!--QuoteBegin-LIGHT+26:06:2007, 12:08 -->
<span class="vbquote">(LIGHT @ 26:06:2007, 12:08 )</span><!--QuoteEBegin-->Forall r In aclentry.Roles
[snapback]70601" rel="nofollow" target="_blank[/snapback]?[/quote]
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
25.06.2007, 14:46 13
Для: LIGHT
<!--QuoteBegin-LIGHT+26:06:2007, 12:08 -->
<span class="vbquote">(LIGHT @ 26:06:2007, 12:08 )</span><!--QuoteEBegin-->Set aclentry = acl.GetEntry(ns.UserName)
[snapback]70601" rel="nofollow" target="_blank[/snapback]?[/quote]

Пользователь ns.UserName в ACL точно есть?
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
25.06.2007, 15:12 14
<!--QuoteBegin-Medevic+26:06:2007, 14:33 -->
<span class="vbquote">(Medevic @ 26:06:2007, 14:33 )</span><!--QuoteEBegin-->Пользователь ns.UserName в ACL точно есть?
[snapback]70633" rel="nofollow" target="_blank[/snapback]?[/quote]
Конечно есть
0
0 / 0 / 2
Регистрация: 07.05.2005
Сообщений: 743
25.06.2007, 20:24 15
проверь
как написано

aclentry.Roles

или

aсlentry.Roles


Смотри в сторону русской "с"
0
poshosrush
06.07.2009, 13:52 16
Цитата Сообщение от Hedg
У меня получилось так


Код
    Dim acl As NotesACL
Dim aclentry As NotesACLEntry
Dim session As New NotesSession
Set db=session.CurrentDatabase
Set acl = db.acl
Set aclentry = acl.GetEntry(session.UserName)

Forall r In aclentry.Roles
Messagebox(r)
End Forall
Если пользователя нет явно в ALC(например он будет просто в какой-то группе), то код выдас ошибку
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
06.07.2009, 14:03 17
А

Код
db.QueryAccessRoles
отменили?
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
06.07.2009, 15:41 18
Вот я себе такое писал. Функция проверяет права пользователя на документ. В моем случае нужна проверка минимум на чтение.
Функция берет роли пользователя, всех пользователей из необходимых Names-полей документа, далее берет всех пользователей из возможных груп и проверяет вхождение ролей пользователя или самого пользователя в полученном списке
входной параметр UName - в каноническом виде
на выходе True - есть доступ и False - соответственно нет.

Код
Function CheckUserRoles( Doc As NotesDocument, UName As Variant ) As Boolean
Dim Session As New NotesSession
Dim DB As NotesDatabase
Dim RolesArray As Variant
Dim MembersArray As Variant
Dim res
Dim i As Integer


Redym RolesArray(0) As Variant

Set DB = Session.CurrentDatabase

MembersArray = {
authors := AuthorsID:AddAuthorsID:DefAuthorsID:ReadersID:AddReadersID;
authors := @ExpandNameList(@Subset(@DbName; 1);authors);
@Unique(@Trim(authors)); }

MembersArray = Evaluate( MembersArray, Doc )

RolesArray = DB.QueryAccessRoles( Uname )

MembersArray = Arrayreplace( MembersArray, RolesArray, "^" )
res = Arraygetindex( MembersArray, "^" )

If Not Isnull( res ) Then
CheckUserRoles = True
Exit Function
End If

MembersArray = Arrayreplace( MembersArray, UName, "^" )
res = Arraygetindex( MembersArray, "^" )

If Not Isnull( res ) Then
CheckUserRoles = True
Exit Function
End If

For i = 0 To Ubound( MembersArray )

If Instr( MembersArray(i), "<тут я пишу начало названия группы. у меня оно одинаковое для всех групп>" ) = 0 Then
MembersArray(i) = ""
End If

Next

MembersArray = Fulltrim( MembersArray )

For i = 0 To Ubound( MembersArray )

RolesArray = Arrayappend( RolesArray, Split( GetGroupMembers( "", "", MembersArray(i), ";", False ), ";" ) )
Next


MembersArray = Arrayreplace( RolesArray, UName, "^" )
res = Arraygetindex( MembersArray, "^" )

If Not Isnull( res ) Then
CheckUserRoles = True
End If

End Function
GetGroupMembers - функция возвращает список пользователей всех групп, включая вложенности.
ее уже пиши сам или выкидывай если не надо
0
0 / 0 / 0
Регистрация: 18.07.2008
Сообщений: 242
07.07.2009, 09:06 19
aclentry.values - может такое проканает?
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
07.07.2009, 10:26 20
без понятия. да и разбираться не хочется. я поделился тем что у меня работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2009, 10:26
Помогаю со студенческими работами здесь

Lotusscript -> Javascript
Имеется простенький поиск на lotusscript, который берет из бд строки с именами пользователей и ищет...

Lotusscript -> @-формулы
Добрый =) Подскажите как обработать массив значений @-формулами, т.е. на lotusscript это так if...

Lotusscript *.lss
Доброго времени суток уважаемые форумчане! Прошу строго не судить т.к. я не прогер и попытаюсь...

Lotusscript And Word
Всем привет! Есть такая проблема, в WORDe через макрос команда записи в колонтитул мне не о чем не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru