AXForum  
Go Back   AXForum > Microsoft Dynamics NAV > NAV: Администрирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search Mark Forums Read

 
 
Thread Tools Search this Thread Display Modes
Old 01.04.2003, 11:55   #1  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Join Date: 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.
Old 04.04.2003, 16:22   #2  
finn is offline
finn
Участник
 
136 / 24 (1) +++
Join Date: 26.12.2001
Location: Москва
"Доступ фильтр" из "Прав доступа"
это примочка для 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;


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

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

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

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

PS:
Вообще непонятно - как может финансовая система иметь подобную кривую систему разграничения доступа - каким образом тогда она позиционируется на рынке.
Old 10.04.2003, 15:27   #5  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Join Date: 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.
Old 11.04.2003, 18:07   #6  
Lexi is offline
Lexi
Участник
 
50 / 10 (1) +
Join Date: 07.04.2003
для Alex_V
Alex_V а нужно ли тебе разделять бюджеты по ЦФО. (то есть каждому ЦФО свой бюджет).

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

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

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

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

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

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

Similar Threads
Thread Thread Starter Forum Replies Last Post
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
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 15:40.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.