![]() |
#4 |
NavAx
|
2 gloomie тоже пришлось нарисовать job, видимо придется прикрутить его к сохранению прав у группы.
X++: static void edd_SetUpUserGroupSecurity(Args _args) { UserGroupId UserGroupId = ''; AccessRightsList AccessRightsList; AccessRightsList AccessRightsList2Ins; DictField DictField; DictTable DictTable; DictType DictType; DictRelation DictRelation; FieldId FieldId; ExtendedTypeId ExtendedTypeId; TableId TableId; int relationNum; ; while select AccessRightsList where AccessRightsList.groupId == UserGroupId && AccessRightsList.recordType == AccessRecordType::Table && AccessRightsList.parentId == 0 && AccessRightsList.accessType >= AccessType::Edit { DictTable = new DictTable(AccessRightsList.id); if (DictTable) { DictRelation = new DictRelation(DictTable.id()); for (relationNum = 1; relationNum <= DictTable.relationCnt(); relationNum++) { TableId = DictRelation.loadNameRelation(DictTable.relation(relationNum)); if (TableId) { select firstonly AccessRightsList2Ins where AccessRightsList2Ins.groupId == AccessRightsList.groupId && AccessRightsList2Ins.domainId == AccessRightsList.domainId && AccessRightsList2Ins.recordType == AccessRecordType::Table && AccessRightsList2Ins.parentId == 0 && AccessRightsList2Ins.accessType >= AccessType::View && AccessRightsList2Ins.id == TableId; if (!AccessRightsList2Ins) { AccessRightsList2Ins.groupId = AccessRightsList.groupId; AccessRightsList2Ins.domainId = AccessRightsList.domainId; AccessRightsList2Ins.recordType = AccessRecordType::Table; AccessRightsList2Ins.parentId = 0; AccessRightsList2Ins.accessType = AccessType::View; AccessRightsList2Ins.accessTypeFkeyUse = AccessType::NoAccess; AccessRightsList2Ins.id = TableId; AccessRightsList2Ins.insert(); info(strfmt("%1", tableId2Name(TableId))); } } } FieldId = DictTable.fieldNext(0); while (FieldId && ! isSysId(FieldId)) { DictField = new DictField(DictTable.id(), FieldId); if (DictField && DictField.rights() >= AccessType::Edit) { ExtendedTypeId = DictField.typeId(); if (ExtendedTypeId) { DictType = new DictType(ExtendedTypeId); if (DictType) { DictRelation = DictType.relationObject(); if (DictRelation) { TableId = DictRelation.table(); if (TableId) { select firstonly AccessRightsList2Ins where AccessRightsList2Ins.groupId == AccessRightsList.groupId && AccessRightsList2Ins.domainId == AccessRightsList.domainId && AccessRightsList2Ins.recordType == AccessRecordType::Table && AccessRightsList2Ins.parentId == 0 && AccessRightsList2Ins.accessType >= AccessType::View && AccessRightsList2Ins.id == TableId; if (!AccessRightsList2Ins) { AccessRightsList2Ins.groupId = AccessRightsList.groupId; AccessRightsList2Ins.domainId = AccessRightsList.domainId; AccessRightsList2Ins.recordType = AccessRecordType::Table; AccessRightsList2Ins.parentId = 0; AccessRightsList2Ins.accessType = AccessType::View; AccessRightsList2Ins.accessTypeFkeyUse = AccessType::NoAccess; AccessRightsList2Ins.id = TableId; AccessRightsList2Ins.insert(); info(strfmt("%1", tableId2Name(TableId))); } } } } } } FieldId = DictTable.fieldNext(FieldId); } } } } |
|
|
За это сообщение автора поблагодарили: Logger (1), gl00mie (3). |