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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.04.2003, 11:55   #1  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
безопасность в attain
Столкнулся с проблемой настройки ввода бюджетов в соответствии с назначенными правами доступа.

1)Имеется бюджет."Бюджет Измерение 2 Код" данного бюджета = ЦФО.
Значения данного измерения следующие: ЦФО1, ЦФО2, ЦФО3, ЦФО4.

2)В системе заведены 4 пользователя. Каждый должен иметь право просматривать и редактировать только те строки бюджета которые имеют в "Бюджет Измерение 2 Код" код соответствующего ЦФО.
Т.е. пользователь1 должен иметь право просматривать и редактировать бюджетные операции по ЦФО1, пользователь2-ЦФО2, пользователь3-ЦФО3, пользователь4-ЦФО4.

3)для этого в системе были заведены 4 роли:
-ЦФО1
1)права доступа аналогичные роли ALL(стандартной)

добавлены:
2)права доступа на таблицу 95: Чтение - Да
3)права доступа на таблицу 96: Чтение-Да, Вставка-Да, Изменение-Да, Удаление-Да, Фильтр: G/L Budget Entry: "Бюджет Измерение 2 Код"=ЦФО1
4)права доступа на таблицу 361,367 и на остальные необходимые таблицы для простоты -все Да

-ЦФО2:
-//-
G/L Budget Entry: "Бюджет Измерение 2 Код"=ЦФО2
-//-

-ЦФО3:
-//-
G/L Budget Entry: "Бюджет Измерение 2 Код"=ЦФО3
-//-

-ЦФО4:
-//-
G/L Budget Entry: "Бюджет Измерение 2 Код"=ЦФО4
-//-
4)Заведены 4 пользователя им присвоены соответсвующие роли:
пользователь1-ЦФО1
пользователь2-ЦФО2
пользователь3-ЦФО3
пользователь4-ЦФО4

5)пользователь входит под своим логином.
6)Финансы->Бюджеты
появляется ошибка нарушения доступа: "Вы не имее права чтения для таблицы Фин. Бюджет Операция. Обратитесь к вашему систкмному администратору для изменения ваших прав доступа".Бюджетные операции изначально имеют разные значения в поле "Бюджет Измерение 2 Код"

причем если сделать к примеру, отдельную кнопку, которая открывает форму "G/L Budget Entries", то каждый пользователь видит только те записи которые ему назначены - что верно.

Путь решения остается один - дописать приблуду на подобие "пользователи настройка права доступа" - по аналогии с безопасностью стандартной. и каждый раз при открытии формы бюджетов, бюджетных операций накладывать соответствующий фильтр.точно также отслеживать и все производимые изменения.В общем - дублирование стандартной функциональности(по правам доступа) но работающей так как надо.

Никто не решал подобных задач без дописывания?Если есть какие нибудь соображения подскажите please.
Старый 04.04.2003, 16:22   #2  
finn is offline
finn
Участник
 
136 / 24 (1) +++
Регистрация: 26.12.2001
Адрес: Москва
"Доступ фильтр" из "Прав доступа"
это примочка для SQL Option

я посмотрел форму 113 Финансы\Бюджеты

вероятнее всего дело в следующем

Этот фильтр безопасности стоит скажем на таблице 96 (G/L Budget Entry).
где-то в в форме мы делаем для таблицы 374 (G/L Acc. Budget Buffer)
CALCFIELDS для поля "Budgeted Amount", которое соответственно построено
по таблице 96.
Перед вычислением поля тоже можно соответственно
наложить фильтры, т.е. присвоить "G/L Acc. Budget Buffer"."Budget Dimension 2 Filter"
какое-то значение или не присвоить.
Если фильтры перед CALCFIELDS не накладывались,
т.е. считаем-вычисляем поле как бы по всему диапазону, а
таблица по которой считаем имеет фильтр безопасности ее ограничивающий, то
получается что при CALCFIELDS пытаемся залесть в закрытую зону
и идет сбой.
Это очевидно баг.

Единственное что можно сделать - так подправить код формы 113, что бы
расхождения между фильтрами перед вычислением "G/L Acc. Budget Buffer".CALCFIELDS("Budget Dimension 2 Filter") и фильтром безопасности
по "G/L Budget Entry" не возникало


я сделал так:

1. в роли наложил фильтры безопасности на 2 таблицы

- Table Data 96 Фин. Бюджет Операция
G/L Budget Entry: Бюджет Измерение 2 Код = ЗИМА

-Table Data 374 Фин. Счет Бюджет Буфер
G/L Acc. Budget Buffer: Бюджет Измерение 2 Фильтр =ЗИМА

2. в форме 113 добавил некоторый код (исправления смотри между ALFI)

*******
- на OpenForm()

CurrForm.GlobalDim1Filter.ENABLED :=
(GLSetup."Global Dimension 1 Code" <> '') AND
(GLAccBudgetBuf.GETFILTER("Global Dimension 1 Filter") = '');
CurrForm.GlobalDim2Filter.ENABLED :=
(GLSetup."Global Dimension 2 Code" <> '') AND
(GLAccBudgetBuf.GETFILTER("Global Dimension 2 Filter") = '');

// ALFI >
//до этого объявил 4 глобальные переменные BudgetDim1PremissionFilter (2,3,4)
BudgetDim1PremissionFilter := FALSE;
BudgetDim2PremissionFilter := FALSE;
BudgetDim3PremissionFilter := FALSE;
BudgetDim4PremissionFilter := FALSE;

IF GLAccBudgetBuf.GETFILTER("Budget Dimension 1 Filter") <> '' THEN BEGIN
BudgetDim1Filter := GLAccBudgetBuf.GETFILTER("Budget Dimension 1 Filter");
BudgetDim1PremissionFilter := TRUE;
END;
IF GLAccBudgetBuf.GETFILTER("Budget Dimension 2 Filter") <> '' THEN BEGIN
BudgetDim2Filter := GLAccBudgetBuf.GETFILTER("Budget Dimension 2 Filter");
BudgetDim2PremissionFilter := TRUE;
END;
IF GLAccBudgetBuf.GETFILTER("Budget Dimension 3 Filter") <> '' THEN BEGIN
BudgetDim3Filter := GLAccBudgetBuf.GETFILTER("Budget Dimension 3 Filter");
BudgetDim3PremissionFilter := TRUE;
END;
IF GLAccBudgetBuf.GETFILTER("Budget Dimension 4 Filter") <> '' THEN BEGIN
BudgetDim4Filter := GLAccBudgetBuf.GETFILTER("Budget Dimension 4 Filter");
BudgetDim4PremissionFilter := TRUE;
END;

CurrForm.BudgetDim1Filter.ENABLED :=
(GLAccBudgetBuf.GETFILTER("Budget Dimension 1 Filter") = '');
CurrForm.BudgetDim2Filter.ENABLED :=
(GLAccBudgetBuf.GETFILTER("Budget Dimension 2 Filter") = '');
CurrForm.BudgetDim3Filter.ENABLED :=
(GLAccBudgetBuf.GETFILTER("Budget Dimension 3 Filter") = '');
CurrForm.BudgetDim4Filter.ENABLED :=
(GLAccBudgetBuf.GETFILTER("Budget Dimension 4 Filter") = '');
// ALFI <

ValidateBudgetName;

*******
- в BudgetDrillDown()


WITH GLBudgetEntry DO
IF (GETFILTER("Global Dimension 1 Code") <> '') OR (GETFILTER("Global Dimension 2 Code") <> '') OR
(GETFILTER("Business Unit Code") <> '')
THEN
SETCURRENTKEY("Budget Name","G/L Account No.","Business Unit Code","Global Dimension 1 Code")
ELSE
SETCURRENTKEY("Budget Name","G/L Account No.",Date);

// ALFI >
GLBudgetEntry.FILTERGROUP(4);
// это что бы провалившись в суммы не могли сделать Вид\Показать все
// ALFI <

FORM.RUN(0,GLBudgetEntry);

*******
- в ValidateBudgetName()

//закоментировал ALFI
{
IF PrevGLBudgetName.Name <> '' THEN BEGIN
IF (GLBudgetName."Budget Dimension 1 Code" <> PrevGLBudgetName."Budget Dimension 1 Code") THEN
BudgetDim1Filter := '';
IF (GLBudgetName."Budget Dimension 2 Code" <> PrevGLBudgetName."Budget Dimension 2 Code") THEN
BudgetDim2Filter := '';
IF (GLBudgetName."Budget Dimension 3 Code" <> PrevGLBudgetName."Budget Dimension 3 Code") THEN
BudgetDim3Filter := '';
IF (GLBudgetName."Budget Dimension 4 Code" <> PrevGLBudgetName."Budget Dimension 4 Code") THEN
BudgetDim4Filter := '';
END;
}


// ALFI >
IF PrevGLBudgetName.Name <> '' THEN BEGIN
IF (GLBudgetName."Budget Dimension 1 Code" <> PrevGLBudgetName."Budget Dimension 1 Code")
AND
(NOT BudgetDim1PremissionFilter)
THEN
BudgetDim1Filter := '';
IF (GLBudgetName."Budget Dimension 2 Code" <> PrevGLBudgetName."Budget Dimension 2 Code")
AND
(NOT BudgetDim2PremissionFilter)
THEN
BudgetDim2Filter := '';
IF (GLBudgetName."Budget Dimension 3 Code" <> PrevGLBudgetName."Budget Dimension 3 Code")
AND
(NOT BudgetDim3PremissionFilter)
THEN
BudgetDim3Filter := '';
IF (GLBudgetName."Budget Dimension 4 Code" <> PrevGLBudgetName."Budget Dimension 4 Code")
AND
(NOT BudgetDim4PremissionFilter)
THEN
BudgetDim4Filter := '';
END;
// ALFI <

//закоментировал ALFI
{
GLAccBudgetBuf.SETFILTER("Budget Dimension 1 Filter",BudgetDim1Filter);
GLAccBudgetBuf.SETFILTER("Budget Dimension 2 Filter",BudgetDim2Filter);
GLAccBudgetBuf.SETFILTER("Budget Dimension 3 Filter",BudgetDim3Filter);
GLAccBudgetBuf.SETFILTER("Budget Dimension 4 Filter",BudgetDim4Filter);
}

// ALFI >
IF (NOT BudgetDim1PremissionFilter) THEN
GLAccBudgetBuf.SETFILTER("Budget Dimension 1 Filter",BudgetDim1Filter);
IF (NOT BudgetDim2PremissionFilter) THEN
GLAccBudgetBuf.SETFILTER("Budget Dimension 2 Filter",BudgetDim2Filter);
IF (NOT BudgetDim3PremissionFilter) THEN
GLAccBudgetBuf.SETFILTER("Budget Dimension 3 Filter",BudgetDim3Filter);
IF (NOT BudgetDim4PremissionFilter) THEN
GLAccBudgetBuf.SETFILTER("Budget Dimension 4 Filter",BudgetDim4Filter);
// ALFI <

//закоментировал ALFI
{
CurrForm.BudgetDim1Filter.ENABLED := (GLBudgetName."Budget Dimension 1 Code" <> '');
CurrForm.BudgetDim2Filter.ENABLED := (GLBudgetName."Budget Dimension 2 Code" <> '');
CurrForm.BudgetDim3Filter.ENABLED := (GLBudgetName."Budget Dimension 3 Code" <> '');
CurrForm.BudgetDim4Filter.ENABLED := (GLBudgetName."Budget Dimension 4 Code" <> '');
}

// ALFI >
IF (NOT BudgetDim1PremissionFilter) THEN
CurrForm.BudgetDim1Filter.ENABLED := (GLBudgetName."Budget Dimension 1 Code" <> '');
IF (NOT BudgetDim2PremissionFilter) THEN
CurrForm.BudgetDim2Filter.ENABLED := (GLBudgetName."Budget Dimension 2 Code" <> '');
IF (NOT BudgetDim3PremissionFilter) THEN
CurrForm.BudgetDim3Filter.ENABLED := (GLBudgetName."Budget Dimension 3 Code" <> '');
IF (NOT BudgetDim4PremissionFilter) THEN
CurrForm.BudgetDim4Filter.ENABLED := (GLBudgetName."Budget Dimension 4 Code" <> '');
// ALFI <

PrevGLBudgetName := GLBudgetName;


.....
Старый 09.04.2003, 12:53   #3  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
походу система безопасности в navision оставляет желать лучшего. Что касается фильтрации - то по большому счету надо дописывать причем объем дописок великоват.
Старый 10.04.2003, 14:22   #4  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
решил сделать следующим образом:
разделил бюджеты по ЦФО - у каждого ЦФО свой бюджет.
в этом случае права доступа выставляю на G/L Budget Name(только чтение ДА) и G/L Budget Entry(все ДА) -

фильтр по имени бюджета. Пришлось добавить в форму 113 в ф-цию ValidateBudgetName строку GLBudgetName.SETPERMISSIONFILTER;

НО теперь трабл в другом:
при попытке добавить операцию в форме бюджетных операций(форма 120) опять вываливается ошибка - Вы не имеете права чтения таблицы Фин. Бюджет Оперция.

Подскажите pls кто нить -в чем может быть проблема?

PS:
Вообще непонятно - как может финансовая система иметь подобную кривую систему разграничения доступа - каким образом тогда она позиционируется на рынке.
Старый 10.04.2003, 15:27   #5  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
проблема в триггере OnInsert таблицы 96 G/L Budget Entry есть вызов ф-ции GetNextEntryNo - для вычисления следующего номера. вот ее код:

GLBudgetEntry.SETCURRENTKEY("Entry No.");
IF GLBudgetEntry.FIND('+') THEN
EXIT(GLBudgetEntry."Entry No." + 1)
ELSE
EXIT(1);

опять же - так как на G/L Budget Entry устнановлен фильтр безопасности по имени бюджета - то вызов уже FIND('+') - приводит к нарушению доступа.
Если сделать что то типа GLBudgetEntry.SETPERMISSIONFILTER перед FIND - то будет пытаться вставить запись с возможно уже имеющимся "Entry No." - ошибка записи.

выход - снять фильтр с G/L Budget Entry и устанавливать фильтрацию перед вызовом формы бюджетных операций с помощью FILTERGROUP - но тоже не все так гладко.

в общем конечного решения пока не нашел. у кого есть какие соображения - поделитесь pls.
Старый 11.04.2003, 18:07   #6  
Lexi is offline
Lexi
Участник
 
50 / 10 (1) +
Регистрация: 07.04.2003
для Alex_V
Alex_V а нужно ли тебе разделять бюджеты по ЦФО. (то есть каждому ЦФО свой бюджет).

Может тебе нужно разделить строки бюджета по ЦФО (Бюджет один, а у каждого ЦФО свои строки).

Подумай.....
Старый 11.04.2003, 18:22   #7  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
так было в самом начале этой темы(один бюджет - но одно из измерений - ЦФО). Но процесс реализации системы разгр. дост. в этом случае более сложный и в конечном счете менее гибкий.

Во-первых помимо бюджетов мне далее надо было аналошично разграничивать доступ в фин. отчетах и аналитических отчетам.
Во-вторых - порядок бюджетных измерений может быть любой. Стоит кому то с соотв. правами его поменять не изменив permission filter и данные будут отображаться неверные.

А в принципе я уже почти реализовал разграничение прав. Но хотелось бы все таки знать побольше вариантов решения данной задачи. Но все равно спасибо за участие.
Старый 11.04.2003, 19:05   #8  
Lexi is offline
Lexi
Участник
 
50 / 10 (1) +
Регистрация: 07.04.2003
Слушай а как ты решаешь (собираешься решать) тогда вопрос показа и работы со сводными данными бюджетов.

Ведь на разном уровне упр. иерархий необходимо показвать и работать с разными строками бюджета? Не уж то копированием?

Вот, к стати не обязательно заводить ЦФО как измерение. Для реализации того метода с которого ты начинал.
Старый 14.04.2003, 12:29   #9  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
именно копированием(стандартная ф-ция "копирование бюджетов"). дело в том что работать со сводным бюджетом достаточно тяжело когда там море информации. поэтому то и сделали что у каждого ЦФО свой бюджет. там они видят всю интересующую их инфу в одном месте, а не вытаскивают из разных мест. К тому же при составлении бюджета на следующий период - ЦФО уже будут использовать готовые шаблоны. Сводный бюджет нужен по большей части только верхнему уровню управленческой иерархии.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Navision Attain через Citrix Alex_V NAV: Администрирование 2 15.12.2003 17:43
Серьезно про RBO (Attain) sash_xp NAV: Прочие вопросы 8 14.08.2003 14:59
Переход на Navision Attain Makc_1 NAV: Прочие вопросы 3 30.07.2003 14:36
attain - Переход на attain Helen NAV: Прочие вопросы 8 04.06.2003 20:34
1С и Attain SlavaShevtsov NAV: Прочие вопросы 2 25.02.2003 17:20

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

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

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