Я занимаюсь строительством системы контроля доступа как части веб-структуры, которую я разрабатываю. Я хочу сделать его супер гибким и потрясающим. Можете ли вы помочь мне, предоставив информацию и проницательность в моем дизайне? Вот моя работа до сих пор (мои конкретные вопросы внизу):
Пользователи
- У пользователей есть имя пользователя (32 символа, пробелы) и пароль
- У пользователей есть один или несколько адресов электронной почты, которые должны быть проверены.
- Пользователи могут войти в систему, используя либо свое имя пользователя, либо любой из своих адресов электронной почты.
- Пользователи могут быть связаны с нулевыми или многими учетными записями
Accounts
- Учетные записи представляют один или несколько пользователей.
- Каждый пользователь может иметь определенные разрешения или роли для учетной записи (например, владельца учетной записи или "может добавлять нового пользователя" ).
- Все учетные записи привязаны к типу учетной записи
Типы учетных записей
- Типы учетных записей имеют ноль или несколько ролей типа учетной записи.
- Типы учетных записей имеют ноль или многие функции типа учетной записи.
Роли учетной записи
- Например, "Владелец", "Администратор", "Пользователь питания", "Гость" и т.д.
- Роли учетной записи - это набор разрешений типа учетной записи.
Разрешения типа учетной записи
- Разрешения типа учетной записи - это конкретные действия в системе, которые логика приложения будет проверять с помощью
- Они могут ссылаться на родителя, поэтому они могут быть иерархически сгруппированы
- т.д.:
- "Управление пользователями"
- "Добавить пользователя"
- "Удалить пользователя"
- "Управление пользователями"
- Эти разрешения могут быть специально для функции типа учетной записи.
Функции типа учетной записи
- Функции учетной записи могут быть активированы в учетной записи, чтобы предоставить ей больше разрешений
- Например, "Стандартная учетная запись" или "Премиум-аккаунт"
- Эти функции, если они активированы в учетной записи, предоставят владельцу учетной записи больший доступ к системе.
- Они отслеживаются, когда они активируются или деактивируются и могут быть выставлены счет периодически или по запросу.
Вопросы
Каков наилучший способ проверки логики приложения против действия пользователя? Я думал о том, чтобы хранить все разрешения пользователя в объекте для своего сеанса (для чего потребуется разрешение для входа/входа в систему для обновления разрешений, к которым я не являюсь поклонником, - каких-либо идей по управлению разрешениями в реальном времени?):
{
"All Permissions": {
"User Management": {
"Add User",
"Delete User"
},
"Premium Account": {
"Download Files",
"Upload Files"
},
}
}
Затем я объявляю разрешения, необходимые для конкретного действия в системе. Может быть, что-то вроде:
Permission::require('Add User');
Если объявленные разрешения не были включены в объект разрешений пользователей, запрос будет терпеть неудачу. Тем не менее, это кажется очень напряженным для каждого действия пользователя. Кроме того, что, если в другом подмножестве разрешений есть строка "Добавить пользователя"?
Заранее благодарим за помощь!