powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация привилегий и дополнительных полей роли
25 сообщений из 90, страница 1 из 4
Реализация привилегий и дополнительных полей роли
    #40107155
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос 1.

На данный момент ролей у меня 6 штук. Для каждой роли есть набор привилегий. У пользователя может быть не одна роль, а сразу несколько. Сами роли зашиты на сервере в enum и в БД хранятся имена enum констант. Привилегий в БД нет вообще.

На данный момент привилегии я сделал на xml:

Код: xml
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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
<?xml version="1.0" encoding="UTF-8"?>
<RolePrivileges>

    <USER>
        <Privilege>
            <value>USER_PROFILE</value>
            <modes>
                <modes>USE</modes>
                <modes>VIEW</modes>
                <modes>CREATE</modes>
                <modes>UPDATE</modes>
                <modes>DELETE</modes>
            </modes>
        </Privilege>
    </USER>

    <MANAGER>
        <Privilege>
            <value>MANAGE</value>
        </Privilege>
        <Privilege>
            <value>MANAGE_USER</value>
            <modes>
                <modes>USE</modes>
                <modes>VIEW</modes>
                <modes>CREATE</modes>
                <modes>UPDATE</modes>
            </modes>
        </Privilege>
        <Privilege>
            <value>MANAGE_GROUP</value>
            <modes>
                <modes>USE</modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>
        <Privilege>
            <value>MANAGE_COURSE</value>
            <modes>
                <modes>USE</modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>
        <Privilege>
            <value>MANAGE_DISCIPLINE</value>
            <modes>
                <modes>USE</modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>
        <Privilege>
            <value>MANAGE_SHOP</value>
            <modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>
        <Privilege>
            <value>MANAGE_SHOP_ITEM</value>
            <modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>
    </MANAGER>

    <ADMIN>
        <Privilege>
            <value>MANAGE</value>
        </Privilege>
        <Privilege>
            <value>MANAGE_USER</value>
        </Privilege>
        <Privilege>
            <value>MANAGE_GROUP</value>
        </Privilege>
        <Privilege>
            <value>MANAGE_COURSE</value>
        </Privilege>
        <Privilege>
            <value>MANAGE_DISCIPLINE</value>
        </Privilege>
        <Privilege>
            <value>MANAGE_SHOP</value>
        </Privilege>
        <Privilege>
            <value>MANAGE_SHOP_ITEM</value>
            <modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>
    </ADMIN>

</RolePrivileges>



К этому xml-ю есть код, который создает Map<RoleType, List<String>> , где коллекция строк это привилегии в строковом представлении.

Есть ли какие-то другие варианты реализации данной части вопроса?

Вопрос 2.

Дополнительные поля роли. У некоторых ролей есть дополнительные сведения, которые есть, только если есть роль у пользователя.

Поля так же описал в xml:

Код: xml
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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
<?xml version="1.0" encoding="UTF-8"?>
<RoleFields>

    <USER>

    </USER>

    <TEACHER>
        <UserRoleField>
            <name>placeOfWork</name>
            <i18nKey>role.field.teacher.place-of-work</i18nKey>
            <type>TEXT</type>
        </UserRoleField>
        <UserRoleField>
            <name>position</name>
            <i18nKey>role.field.teacher.position</i18nKey>
            <type>TEXT</type>
        </UserRoleField>
        <UserRoleField>
            <name>experience</name>
            <i18nKey>role.field.teacher.experience</i18nKey>
            <type>LONG_TEXT</type>
        </UserRoleField>
        <UserRoleField>
            <name>about</name>
            <i18nKey>role.field.teacher.about</i18nKey>
            <type>LONG_TEXT</type>
        </UserRoleField>
    </TEACHER>

    <MANAGER>

    </MANAGER>

    <LISTENER>
        <UserRoleField>
            <name>group</name>
            <i18nKey>role.field.listener.group</i18nKey>
            <type>SELECT</type>
        </UserRoleField>
        <UserRoleField>
            <name>course</name>
            <i18nKey>role.field.listener.course</i18nKey>
            <type>SELECT</type>
        </UserRoleField>
        <UserRoleField>
            <name>customer</name>
            <i18nKey>role.field.listener.customer</i18nKey>
            <type>SELECT</type>
        </UserRoleField>
    </LISTENER>

    <CUSTOMER>

    </CUSTOMER>

    <ADMIN>

    </ADMIN>

</RoleFields>



В БД есть таблицу, которая связывает пользователя с ролью. И к этой таблице привязывается таблица, в которой находятся поля.

Есть ли альтернативы?
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107160
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для чего роли и привелегии?
нафига xml?
есть база, делаешь запрос по юзеру - получаешь то к чему у. него есть доступ, и прочее
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107164
Tsyklop, а нужна такая гибкость вообще? Так сложно делают обычно когда роли/привилегии могут настраиваться динамически. А в случаях по-проще можно и хардкодить условия завязываясь на роли. В случаях чуть сложней можно в сами енумы добавлять поля:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public enum Role {
    ADMIN(true, true, true, true, true);

    private final boolean use, view, create, update, delete;

    Role(boolean use, boolean view, boolean create, boolean update, boolean delete) {
        this.use = use;
        this.view = view;
        this.create = create;
        this.update = update;
        this.delete = delete;
    }
}

Хотя твой вариант на самом деле тоже не супер сложным выглядит. А вот по поводу доп полей и как они к разграничению прав относятся - не понял.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107168
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev
Tsyklop, а нужна такая гибкость вообще? Так сложно делают обычно когда роли/привилегии могут настраиваться динамически. А в случаях по-проще можно и хардкодить условия завязываясь на роли. В случаях чуть сложней можно в сами енумы добавлять поля:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public enum Role {
    ADMIN(true, true, true, true, true);

    private final boolean use, view, create, update, delete;

    Role(boolean use, boolean view, boolean create, boolean update, boolean delete) {
        this.use = use;
        this.view = view;
        this.create = create;
        this.update = update;
        this.delete = delete;
    }
}

Хотя твой вариант на самом деле тоже не супер сложным выглядит. А вот по поводу доп полей и как они к разграничению прав относятся - не понял.


На самом деле задумался (еще после комментария вади) в необходимости привилегий как таковых. В будущем можно будет прикрутить, а сейчас это будет избыточно.

Дополнительные поля и привилегии никак между собой не связаны. Это два разных вопроса. Возможно название ввело в заблуждение.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107225
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop
Есть ли какие-то другие варианты реализации данной части вопроса?
либа есть штатная. Зачем велосипед?
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107314
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Tsyklop
Есть ли какие-то другие варианты реализации данной части вопроса?
либа есть штатная. Зачем велосипед?

Что за либа?
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107327
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
Spring security
?
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107547
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Tsyklop,
Spring security
?


Что-то не совсем понял. Списка ролей не секюрити нет. Их даёт сам программист. И проводит настройку доступов тоже программист. Секюрити дает функционал по аутентификации. Где в секюрити роли и привилегии, хранение в бд... не понимаю.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107578
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tsyklop, Очень похоже, что вам надо настроить ACL

https://www.baeldung.com/spring-security-acl
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107593
Roman Osipov , не, ACL - это про секюрити на объекты. Т.е. есть вполне конкретный курс в таблице курсов - вот на него хочу выдать права таким-то пользователям. А то что в первом посте у Tsyklop - это все-таки разрешения на выполнение функций в приложении.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107629
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev, На первый взгляд - ничего не мешает определить в качестве Domain Objects бины, реализующие DAO или сервисный слой. И строки в таблице и наши классы в приложении - суть ресурсы, к которым можно задать ACL доступ. Или не так понимаю?
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107636
Roman Osipov, ну судя по XML файлу там по сути ограничение на ендпоинты. Например:
Код: xml
1.
2.
3.
4.
5.
6.
7.
        <Privilege>
            <value>MANAGE_COURSE</value>
            <modes>
                <modes>USE</modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>

Тут говорится что такая привилегия позволяет просматривать курсы. Но тут не сказано какой конкретно курс. А значит это то же самое что в Spring Security сконфигурить ендпоинт и сказать что пользователь с ролью USER имеет право его вызывать.

А в ACL любой будет иметь возможность вызвать ендпоинт, но потом нужно будет сходить в БД и убедиться что мы можем просматривать именно курс с ID=x. Это медленно и сложно, я бы рассматривал такой вариант только если других нет.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107640
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самое главное нет ответа
для чего роли и привилегии?
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107645
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev
Roman Osipov, ну судя по XML файлу там по сути ограничение на ендпоинты. Например:
Код: xml
1.
2.
3.
4.
5.
6.
7.
        <Privilege>
            <value>MANAGE_COURSE</value>
            <modes>
                <modes>USE</modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>

Тут говорится что такая привилегия позволяет просматривать курсы. Но тут не сказано какой конкретно курс. А значит это то же самое что в Spring Security сконфигурить ендпоинт и сказать что пользователь с ролью USER имеет право его вызывать.

А в ACL любой будет иметь возможность вызвать ендпоинт, но потом нужно будет сходить в БД и убедиться что мы можем просматривать именно курс с ID=x. Это медленно и сложно, я бы рассматривал такой вариант только если других нет.


В доках Спринга декларируется, что структуры ACL очень эффективно кэшируются - проблемы с производительностью вряд ли случатся. И стандартный функционал наверное лучше чем велосипедный - он уже оттестирован и по крайней мере баги можно загуглить.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107649
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop
PetroNotC Sharp
Tsyklop,
Spring security
?


Что-то не совсем понял. Списка ролей не секюрити нет. Их даёт сам программист. И проводит настройку доступов тоже программист. Секюрити дает функционал по аутентификации. Где в секюрити роли и привилегии, хранение в бд... не понимаю.
ты забыл что сейчас из каждого утюга REST.
Это значит что фильтруя урл, ты получаешь первый уровень по разрешениям.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107650
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
В веб обычно роли не от субд. Хибер ходит под одним логином
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107658
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
вадя,
В веб обычно роли не от субд. Хибер ходит под одним логином
дак поэтому и такой вопрос и был задан
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107663
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
PetroNotC Sharp
вадя,
В веб обычно роли не от субд. Хибер ходит под одним логином
дак поэтому и такой вопрос и был задан


В системах может быть разграничение пользователей по возможностям. Например Обычный юзверь, Манагер и Админ.

На бэке есть список эндпоинтов. Но обычный пользователь не может делать то, что делает Админ и это нужно как-то контролировать.

Контролируется ролями (в большей части приложений) и привилегиями (более гибкая штука. Зачастую используется в CRM системах (я так думаю), где те самые роли с привилегиями можно настраивать через БД, то бишь все хранится в бд.).

Каждому пользователю в системе выдается роль или несколько ролей при помощи которых ведется контроль доступа к разным эндпоинтам на бэке.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107664
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Osipov
Stanislav Bashkyrtsev
Roman Osipov, ну судя по XML файлу там по сути ограничение на ендпоинты. Например:
Код: xml
1.
2.
3.
4.
5.
6.
7.
        <Privilege>
            <value>MANAGE_COURSE</value>
            <modes>
                <modes>USE</modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>

Тут говорится что такая привилегия позволяет просматривать курсы. Но тут не сказано какой конкретно курс. А значит это то же самое что в Spring Security сконфигурить ендпоинт и сказать что пользователь с ролью USER имеет право его вызывать.

А в ACL любой будет иметь возможность вызвать ендпоинт, но потом нужно будет сходить в БД и убедиться что мы можем просматривать именно курс с ID=x. Это медленно и сложно, я бы рассматривал такой вариант только если других нет.


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


Функционал с ролями, привилегиями не велосипед - это есть в секюрити. То что предлагаете Вы интересно, но для проекта избыточно. Хотя в нескольких моментах вижу применение.

Спасибо за информацию.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107678
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop
PetroNotC Sharp
Tsyklop,
Spring security
?


Что-то не совсем понял. Списка ролей не секюрити нет. Их даёт сам программист. И проводит настройку доступов тоже программист. Секюрити дает функционал по аутентификации. Где в секюрити роли и привилегии, хранение в бд... не понимаю.
простейший вариант - куча фильтров где проверяется сам урл и действие по CRUD.
В Spring DefaultSecurityFilterChain
вы проверяете урл - это ресурс. И что с ним делаем по CRUD.
Хранить роли можно где угодно.
sql.ru/app/post/123456 delete or get or....
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107684
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,

если это веб - то для каждой роли пишется разрешённая страница, на этой странице формируются только те данные, что позволены данной роли. если если у роли есть привилегии - то в зависимости от привилегии формируются те или иные части dom. ну и соответственно куски js.

при создании страницы загружаются из базы разрешения - и вперед
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107712
Roman Osipov
Stanislav Bashkyrtsev
Roman Osipov, ну судя по XML файлу там по сути ограничение на ендпоинты. Например:
Код: xml
1.
2.
3.
4.
5.
6.
7.
        <Privilege>
            <value>MANAGE_COURSE</value>
            <modes>
                <modes>USE</modes>
                <modes>VIEW</modes>
            </modes>
        </Privilege>

Тут говорится что такая привилегия позволяет просматривать курсы. Но тут не сказано какой конкретно курс. А значит это то же самое что в Spring Security сконфигурить ендпоинт и сказать что пользователь с ролью USER имеет право его вызывать.

А в ACL любой будет иметь возможность вызвать ендпоинт, но потом нужно будет сходить в БД и убедиться что мы можем просматривать именно курс с ID=x. Это медленно и сложно, я бы рассматривал такой вариант только если других нет.


В доках Спринга декларируется, что структуры ACL очень эффективно кэшируются - проблемы с производительностью вряд ли случатся. И стандартный функционал наверное лучше чем велосипедный - он уже оттестирован и по крайней мере баги можно загуглить.
Ну в доках спринга может много чего быть написано, но кеширование становится затруднительным когда а) у нас появляется более одной ноды и б) если нужно кешировать самую большую таблицу в приложении (а ACL таблицы обычно намного больше чем таблицы с самими объектами).

Но как ни крути - ACL решает совершенно другую проблему. Это логически работает не как роли - это совершенно другой подход и предназначен он для другого. Его просто не получится использовать для решения подобных задач. Разве что сами задачи поменять и реализовывать другие требования.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107714
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
Tsyklop,

если это веб - то для каждой роли пишется разрешённая страница, на этой странице формируются только те данные, что позволены данной роли. если если у роли есть привилегии - то в зависимости от привилегии формируются те или иные части dom. ну и соответственно куски js.

при создании страницы загружаются из базы разрешения - и вперед


У меня REST приложение. Бэк на спринге, а фронт на ReactJS. У меня сервер ничего не знает про фронт. У него есть ресурсы, которые он обслуживает. Запросы можно делать через тот же Postman. Посему роли нужны на бэке. Понятное дело, что фронт знает роль юзверя и в зависимости от этого отрисовывает UI.
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107715
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Не прикидывайся. Вопрос выше как в коде писать роли. Не на jdbc же)
...
Рейтинг: 0 / 0
Реализация привилегий и дополнительных полей роли
    #40107718
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop
вадя
Tsyklop,

если это веб - то для каждой роли пишется разрешённая страница, на этой странице формируются только те данные, что позволены данной роли. если если у роли есть привилегии - то в зависимости от привилегии формируются те или иные части dom. ну и соответственно куски js.

при создании страницы загружаются из базы разрешения - и вперед


У меня REST приложение. Бэк на спринге, а фронт на ReactJS. У меня сервер ничего не знает про фронт. У него есть ресурсы, которые он обслуживает. Запросы можно делать через тот же Postman. Посему роли нужны на бэке. Понятное дело, что фронт знает роль юзверя и в зависимости от этого отрисовывает UI.

При такой постановке знание фронту своей роли - ничего не даёт. Фронт полностью зависит от бэка и просто отрисовывает то
что ему дали.
...
Рейтинг: 0 / 0
25 сообщений из 90, страница 1 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация привилегий и дополнительных полей роли
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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