Написал жобик для проверки прав настроенных на отдельные поля (любые элементы) формы.
PHP код:
static void CheckAccess(Args _args)
{
SysSecurityFormControlTable SysSecurityFormControlTable;
SysSecurityFormTable SysSecurityFormTable;
FormRun fr;
FormBuildDesign fbd;
Args args = new Args();
Map name2id;
Map name2label;
str 30 getLabel(Object _control)
{
switch (classIdGet(_control))
{
case classnum(FormBuildStringControl):
case classnum(FormBuildCheckBoxControl):
case classnum(FormBuildGroupControl):
case classNum(FormBuildRealControl):
case classNum(FormBuildIntControl):
case classNum(FormBuildComboBoxControl):
case classNum(FormBuildWindowControl):
case classNum(FormBuildDateControl):
case classNum(FormBuildListBoxControl):
case classNum(FormBuildTimeControl):
return _control.label();
case classNum(FormBuildRadioControl):
case classNum(FormBuildTabPageControl):
return _control.caption();
case classNum(FormBuildButtonControl):
case classNum(FormBuildCommandButtonControl):
case classNum(FormBuildMenuButtonControl):
case classNum(FormBuildFunctionButtonControl):
return _control.text();
default :
return _control.name();
}
return _control.name();
}
void fillMap(Object _containerControl)
{
int i;
Object fbc;
for( i = 1; i <= _containerControl.controlCount(); i ++)
{
fbc = _containerControl.controlNum(i);
if(fbc.isContainer())
fillMap(fbc);
else
{
name2id.insert(fbc.name(), fbc.id());
name2label.insert(fbc.name(), getLabel(fbc));
}
}
}
SetPrefix('Проверка прав на контролы');
while select SysSecurityFormTable
order by DomainId, FormName, UserGroupId
{
args.name(SysSecurityFormTable.FormName);
fr = ClassFactory::formRunClassOnClient(args);
fbd = fr.form().design();
name2id = new Map(Types::String, Types::Integer);
name2label = new Map(Types::String, Types::String);
fillMap(fbd);
SetPrefix(strFmt("%2 (%1)\t %3", fr.name(), fbd.caption(), SysSecurityFormTable.UserGroupId));
while select SysSecurityFormControlTable
order by FormControlName, FormControlId
where SysSecurityFormControlTable.SysSecurityFormId == SysSecurityFormTable.RecId
{
if(name2id.exists(SysSecurityFormControlTable.FormControlName) &&
name2id.lookup(SysSecurityFormControlTable.FormControlName) == SysSecurityFormControlTable.FormControlId)
info(strFmt("%1 (%2) - %3", name2label.lookup(SysSecurityFormControlTable.FormControlName),
SysSecurityFormControlTable.FormControlName, SysSecurityFormControlTable.AccessType));
else
{
if(name2label.exists(SysSecurityFormControlTable.FormControlName))
error(strFmt("%1 (%2) - %3", name2label.lookup(SysSecurityFormControlTable.FormControlName),
SysSecurityFormControlTable.FormControlName, SysSecurityFormControlTable.AccessType));
else
error(strFmt("%1 - %2", SysSecurityFormControlTable.FormControlName, SysSecurityFormControlTable.AccessType));
}
}
}
}