Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация привилегий и дополнительных полей роли / 25 сообщений из 90, страница 1 из 4
26.10.2021, 20:43
    #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
26.10.2021, 20:50
    #40107160
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация привилегий и дополнительных полей роли
для чего роли и привелегии?
нафига xml?
есть база, делаешь запрос по юзеру - получаешь то к чему у. него есть доступ, и прочее
...
Рейтинг: 0 / 0
26.10.2021, 21:13
    #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
26.10.2021, 21:42
    #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
27.10.2021, 10:08
    #40107225
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация привилегий и дополнительных полей роли
Tsyklop
Есть ли какие-то другие варианты реализации данной части вопроса?
либа есть штатная. Зачем велосипед?
...
Рейтинг: 0 / 0
27.10.2021, 13:10
    #40107314
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация привилегий и дополнительных полей роли
PetroNotC Sharp
Tsyklop
Есть ли какие-то другие варианты реализации данной части вопроса?
либа есть штатная. Зачем велосипед?

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


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

https://www.baeldung.com/spring-security-acl
...
Рейтинг: 0 / 0
27.10.2021, 22:33
    #40107593
Реализация привилегий и дополнительных полей роли
Roman Osipov , не, ACL - это про секюрити на объекты. Т.е. есть вполне конкретный курс в таблице курсов - вот на него хочу выдать права таким-то пользователям. А то что в первом посте у Tsyklop - это все-таки разрешения на выполнение функций в приложении.
...
Рейтинг: 0 / 0
28.10.2021, 08:27
    #40107629
Roman Osipov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация привилегий и дополнительных полей роли
Stanislav Bashkyrtsev, На первый взгляд - ничего не мешает определить в качестве Domain Objects бины, реализующие DAO или сервисный слой. И строки в таблице и наши классы в приложении - суть ресурсы, к которым можно задать ACL доступ. Или не так понимаю?
...
Рейтинг: 0 / 0
28.10.2021, 09:22
    #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
28.10.2021, 10:02
    #40107640
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация привилегий и дополнительных полей роли
самое главное нет ответа
для чего роли и привилегии?
...
Рейтинг: 0 / 0
28.10.2021, 10:15
    #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
28.10.2021, 10:23
    #40107649
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация привилегий и дополнительных полей роли
Tsyklop
PetroNotC Sharp
Tsyklop,
Spring security
?


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


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

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

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

Каждому пользователю в системе выдается роль или несколько ролей при помощи которых ведется контроль доступа к разным эндпоинтам на бэке.
...
Рейтинг: 0 / 0
28.10.2021, 11:13
    #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
28.10.2021, 11:47
    #40107678
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация привилегий и дополнительных полей роли
Tsyklop
PetroNotC Sharp
Tsyklop,
Spring security
?


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

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

при создании страницы загружаются из базы разрешения - и вперед
...
Рейтинг: 0 / 0
28.10.2021, 12:56
    #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
28.10.2021, 13:03
    #40107714
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация привилегий и дополнительных полей роли
вадя
Tsyklop,

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

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


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

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

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


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

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


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