06.10.2017, 11:39 | #1 |
Участник
|
Безопасность на уровне записей (выбрать все условия)
Здравствуйте!
Такая задача: надо формировать отчёт по договорам. При выводе отчета учитывать ограничения, заданные для групп пользователей по Договорам в Безопасности на уровне записей. Как я понимаю, один пользователь может быть в нескольких группах. Пытаюсь сделать перебор по группам и если они встречаются в SysRecordLevelSecurity, то в запрос добавлять условия из этой таблицы. Пока сделал как-то коряво. Подскажите как сделать более правильно. Вот то, что пока придумал: X++: private void parmRContractTable(Args _args) { RContractTable tmpRContractTable; UserGroupList userGroupList; integer j; Query q; QueryBuildRange qbr; QueryBuildDataSource qbds; SysQueryRun sysRun; SysRecordLevelSecurity sysRecord; ; tmpRContractTable = _args.record(); rContractTypes = tmpRContractTable.rContractPartnerType; q = new Query(); qbds = q.addDataSource(tablenum(RContractTable)); while select userGroupList where userGroupList.userId == curUserId() { select firstonly sysRecord where sysRecord.groupId == userGroupList.groupId && sysRecord.tabId == tablenum(RContractTable) && sysRecord.companyId == curext(); if(sysRecord) { sysRun = new SysQueryRun(sysRecord.restriction); sysRun.next(); for(j=1; j<sysRun.query().dataSourceNo(1).rangeCount(); j++) { qbr = sysRun.query().dataSourceNo(1).range(j); qbds.addRange(qbr.field()).value(qbr.value()); } } } query = new Query(q); } |
|
06.10.2017, 11:45 | #2 |
NavAx
|
X++: Query q = new Query(); q.recordLevelSecurity(true); |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
|
Похожие темы | ||||
Тема | Ответов | |||
Безопасность на уровне записей | 44 | |||
Безопасность на уровне записи | 11 | |||
Влияние настройки доступа на уровне записей | 2 | |||
Настройка прав доступа на уровне записей | 19 | |||
Безопасность на уровне записей | 5 |
|