Показать сообщение отдельно
Старый 23.03.2006, 13:10   #15  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Проверка прав после каждого переноса
Написал жобик для проверки прав настроенных на отдельные поля (любые элементы) формы.

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( 
1<= _containerControl.controlCount(); ++)
        {
            
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
FormNameUserGroupId
    
{
        
args.name(SysSecurityFormTable.FormName);
        
fr ClassFactory::formRunClassOnClient(args);
        
fbd fr.form().design();

        
name2id = new Map(Types::StringTypes::Integer);
        
name2label = new Map(Types::StringTypes::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.FormControlNameSysSecurityFormControlTable.AccessType));
            else
            {
                if(
name2label.exists(SysSecurityFormControlTable.FormControlName))
                    
error(strFmt("%1 (%2) - %3"name2label.lookup(SysSecurityFormControlTable.FormControlName),
                                                 
SysSecurityFormControlTable.FormControlNameSysSecurityFormControlTable.AccessType));
                else
                    
error(strFmt("%1 - %2"SysSecurityFormControlTable.FormControlNameSysSecurityFormControlTable.AccessType));
            }
        }
    }

За это сообщение автора поблагодарили: Dron AKA andy (2), glibs (5), Logger (5).