AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.03.2006, 13:10   #20  
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).
Теги
ax3.0, id объекта, xpo, законченный пример, импорт, права доступа

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Бага при импорте проекта Logger DAX: Программирование 0 09.12.2008 13:57
Сколько процентов от стоимости проекта идет на ФОТ? (анонимный опрос) Spider DAX: Прочие вопросы 1 27.09.2006 08:22
Проблемы при импорте и экспорте проекта FiGr DAX: Прочие вопросы 0 23.05.2006 16:41
Удаление проекта Maxim Gorbunov DAX: Программирование 0 24.12.2001 23:04

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:56.