Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Организация грамотного постраничного доступа к страницам / 8 сообщений из 8, страница 1 из 1
01.10.2008, 14:57
    #35569889
AlexProOra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация грамотного постраничного доступа к страницам
Уважаемые коллеги, прошу Вас поделиться опытом, как грамотно организовать доступ.
Имею приложение в APEX (боллее 40 страниц), есть 3 группы пользователей, нужно часть страниц показывать всем, часть одной, и т.д.
Делаю так и постепенно понимаю что это не то:
1. Завожу пользователей и присваиваю им группы;
2. В объектах страниц (в разделе Conditional Display) проверяю группу пользователя get_group_user....
и как то это все коряво получатся, подскажите плиз как разграничить доступ на уровне страниц, на уровне элементов вроде понятно..
+ нужно еще и закладки скрывать :(

C Уважением,
Алексей.
...
Рейтинг: 0 / 0
01.10.2008, 15:10
    #35569929
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация грамотного постраничного доступа к страницам
На сколько я понимаю, надо делать ч/з Authorization Scheme
...
Рейтинг: 0 / 0
01.10.2008, 15:25
    #35569988
AlexProOra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация грамотного постраничного доступа к страницам
DIGITALPROНа сколько я понимаю, надо делать ч/з Authorization Scheme

Угу, спасибо, разбираюсь...
но там тоже нужно указывать условия отображения. Нет возможности указания пользователей имеющих доступ, груп и т.д.
Может есть уже варианты обкатанные на практике.
1 страница - видят все
2 страница - видит группа 1
3 страница - видят группы 1 и 2
...
Рейтинг: 0 / 0
01.10.2008, 15:36
    #35570013
l_kator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация грамотного постраничного доступа к страницам
1.Функция должна отработать один раз и вернуть, допустим, список страниц, на которые есть доступ у группы
2. схема авторизации должна проверять есть ли номер текущей страницы в списке разрешенных для этой группы

что-то такое
...
Рейтинг: 0 / 0
01.10.2008, 15:43
    #35570030
VladIg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация грамотного постраничного доступа к страницам
AlexProOra DIGITALPROНа сколько я понимаю, надо делать ч/з Authorization Scheme
...1 страница - видят все
2 страница - видит группа 1
3 страница - видят группы 1 и 2
Для каждого вариант, указанного выше создаешь схему авторизации. И в зависимости от того как нужно, навешиваешь их на Tabs у конкретной страницы(Shared Components>Tabs),в разделе Authorization.
То есть нужные Закладки будут видны тольте тем, кто входит в навешенную схему авторизации.
У меня сделано так, но нет цели во чтобы то не стало ограничить доступ. Сделано, чтобы куча закладок не бросалась в глаза тем людям, которые ими не пользуются. Возможно надо еще и на саму страницу весить схему.
...
Рейтинг: 0 / 0
09.10.2008, 13:06
    #35585391
V_i_t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация грамотного постраничного доступа к страницам
AlexProOraУважаемые коллеги, прошу Вас поделиться опытом, как грамотно организовать доступ.
Имею приложение в APEX (боллее 40 страниц), есть 3 группы пользователей, нужно часть страниц показывать всем, часть одной, и т.д.
Делаю так и постепенно понимаю что это не то:
1. Завожу пользователей и присваиваю им группы;
2. В объектах страниц (в разделе Conditional Display) проверяю группу пользователя get_group_user....
и как то это все коряво получатся, подскажите плиз как разграничить доступ на уровне страниц, на уровне элементов вроде понятно..
+ нужно еще и закладки скрывать :(

C Уважением,
Алексей.

Базовое описание для создание управляемой схемой авторизаций по ссылке:
http://djmein.blogspot.com/2007/07/custom-authentication-authorisation.html
Если нужно расширить функционал и добавить просмотр по страницам в зависимости от авторизации то необходимо создать таблицу пользователей с полем для уровня авторизаций.
CREATE TABLE APP_USERS (
USERNAME VARCHAR2(10),
PASSWORD VARCHAR2(255),
AUTH Varchar2(1)
)
/

gde auth naprimer budet
3 - administrator aplikacii
2 - user s vozmozhnostjami redaktirovanija
1 - user toljko prosmatrivajushij

Далее (описание продолжает темы ссылки выше):

В зависимости от того как организован у Вас доступ к страницам (TAB либо List либо другое).
Для каждого элемента TAB ili LIST в
Condition -> Condition Type -> Укажите Exists (SQL query at least returns one row)
-> Expression 1 -> select '1' from apex_users where upper(username)=upper(:APP_USER) and auth='1'

- Из этого описания следует, что к указаному элементу пусть то будет страница, регион страницы или другой элемент доступ будут иметь только пользователи с авторизацией '1' - (user toljko prosmatrivajushij).

То же самое следует повторить и для остальных страниц, TAB и LIST.
Расширить схему авторизаций можно меняя селект:
select '1' from apex_users where upper(username)=upper(:APP_USER) and auth<'3' - элемент будет доступен всем пользователям 1-2 групп и 3-й группе недоступен и т.д.

Затем на каждой странице нужно указать в полях элементов такие же авторизации. Например скрыть кнопки редактирования в форме для 1-й группы но для 2-3-й открытые и т.д.
...
Рейтинг: 0 / 0
10.10.2008, 10:33
    #35587317
V_i_t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация грамотного постраничного доступа к страницам
V_i_t AlexProOraУважаемые коллеги, прошу Вас поделиться опытом, как грамотно организовать доступ.
Имею приложение в APEX (боллее 40 страниц), есть 3 группы пользователей, нужно часть страниц показывать всем, часть одной, и т.д.
Делаю так и постепенно понимаю что это не то:
1. Завожу пользователей и присваиваю им группы;
2. В объектах страниц (в разделе Conditional Display) проверяю группу пользователя get_group_user....
и как то это все коряво получатся, подскажите плиз как разграничить доступ на уровне страниц, на уровне элементов вроде понятно..
+ нужно еще и закладки скрывать :(

C Уважением,
Алексей.

Базовое описание для создание управляемой схемой авторизаций по ссылке:
http://djmein.blogspot.com/2007/07/custom-authentication-authorisation.html
Если нужно расширить функционал и добавить просмотр по страницам в зависимости от авторизации то необходимо создать таблицу пользователей с полем для уровня авторизаций.
CREATE TABLE APP_USERS (
USERNAME VARCHAR2(10),
PASSWORD VARCHAR2(255),
AUTH Varchar2(1)
)
/

gde auth naprimer budet
3 - administrator aplikacii
2 - user s vozmozhnostjami redaktirovanija
1 - user toljko prosmatrivajushij

Далее (описание продолжает темы ссылки выше):

В зависимости от того как организован у Вас доступ к страницам (TAB либо List либо другое).
Для каждого элемента TAB ili LIST в
Condition -> Condition Type -> Укажите Exists (SQL query at least returns one row)
-> Expression 1 -> select '1' from apex_users where upper(username)=upper(:APP_USER) and auth='1'

- Из этого описания следует, что к указаному элементу пусть то будет страница, регион страницы или другой элемент доступ будут иметь только пользователи с авторизацией '1' - (user toljko prosmatrivajushij).

То же самое следует повторить и для остальных страниц, TAB и LIST.
Расширить схему авторизаций можно меняя селект:
select '1' from apex_users where upper(username)=upper(:APP_USER) and auth<'3' - элемент будет доступен всем пользователям 1-2 групп и 3-й группе недоступен и т.д.

Затем на каждой странице нужно указать в полях элементов такие же авторизации. Например скрыть кнопки редактирования в форме для 1-й группы но для 2-3-й открытые и т.д.

Забыл добавить что в оригинальном посте забыта одна настройка:
Home>Application Builder>Application XXX>Shared Components>Authentication Schemes>Edit Authentication Scheme -> Page Session Management -> Session Not Valid Page -> Укажите здесь страницу авторизации в апликацию (где вводятся Username i Password) по умолчанию она 101. и там же в разделе Logout URL укажите wwv_flow_custom_auth_std.logout?p_this_flow=&APP_ID.&p_next_flow_page_sess=&APP_ID.:1.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.12.2011, 15:10
    #37563202
Valkar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация грамотного постраничного доступа к страницам
оператор "Exists (SQL query at least returns one row)" это очень шаткая штука для разграничения прав ...
я лично написал функцию ,результат которой можно оценивать как уровень доступа на странице

булеан потому что так апекс требует )

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
    FUNCTION user_role_auth (p_username    VARCHAR2,
                             p_userrole    NUMBER,
                             p_reverse     VARCHAR2 DEFAULT NULL)
        RETURN BOOLEAN
    IS
        -- p_userrole - параметр указывающий на то по какому значению уровня безопасности разрешено действие
        -- p_reverse - параметр который может проинвертировать результат если это нужно
        -----например  пользователь 'test'  имеет  security_group_id = 3
        ----- при параметрах p_userrole = 2 получим запрет
        ----- при параметрах p_userrole = 2 и p_reverse not null  получим разрешено
        ----- таким образом одни права запрещаются и другие МОЖНО включить
        user_role   NUMBER;
        user_res    BOOLEAN;
    BEGIN
        SELECT   t.security_group_id
          INTO   user_role
          FROM   ba2_chk_user t
         WHERE   AND UPPER (user_name) = UPPER (p_username);

        IF user_role <= p_userrole
        THEN
            --доступ высокого уровня    разрешено
            --true
            user_res := TRUE;
        ELSE
            -- доступ запрещён
            --false
            user_res := FALSE;
        END IF;

        IF p_reverse IS NOT NULL
        THEN
            IF user_res
            THEN
                user_res := FALSE;
            ELSE
                user_res := TRUE;
            END IF;
        END IF;

        RETURN (user_res);
    END user_role_auth;



на апексовой странице в conditions
выставляем Condition Type = "PL/SQL Expression"
"Expression 1" = "user_role_auth (:P101_USERNAME,2)"
или
"Expression 1" = "user_role_auth (:P101_USERNAME,2,'Y')"

например 1-Admin, 2-Power_User, 3-Viewer

и ролей можно придумывать столько, сколько угодно главное чтобы они шли по нарастающей ... то есть 1-бог а 3-никто

таким образом одни Regions которые можно смотреть покажутся ... а в другом случае наоборот

я вот так решил проблему доступа. )
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Организация грамотного постраничного доступа к страницам / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]