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);
}
}
}
}