Я бы не советовал отличать пользователей от клиентов в этой ситуации. Эти проблемы могут быть решены с помощью ролей. Прежде чем перейти к разработке, ознакомьтесь с Аутентификация, авторизация и аудит и Контроль доступа на основе ролей .
Насколько я понимаю, это обзор процесса аутентификации (обратите внимание, что я не эксперт по безопасности):
Этап идентификации связан с получением учетных данных пользователя. Подойдет простая форма, которая получает имя пользователя и пароль.
Фаза аутентификации представляет процесс, который сопоставляет учетные данные пользователя с пользователем. По сути, он идентифицирует провайдера идентификации и использует его для получения идентификатора пользователя для предоставленных учетных данных пользователя.
При просмотре как сервисы они выглядят примерно так:
// You can have many IdentityProviders. This mecanism allows you to extend your
// authentication system so you can use any mechanism (WebDav, Kerberos, etc).
IIdentityProvider
{
// Returns a pozitive id if the user is found and the credentials are valid
// or zero if user credentials are invalid (or negative numbers that represent
// error codes).
UserID GetUser(UserCredentials)
}
IAuthenticationService
{
Session SignIn(UserCredentials)
void SignOut(Session)
}
DefaultIdentityProvider : IIdentityProvider
{
// Search the user in your database.
UserID GetUser(UserCredentials credentials)
}
AuthenticationService : IAuthenticationService
{
IIdentityProvider[] identityProviders
Session SignIn(UserCredentials credentials)
{
IIdentityProvider provider = identityProviders[credentials.Type]
Session session = null
if (provider)
{
UserID userID = provider.GetUser(credentials)
if (userID > 0)
{
session = new Session
session.UserID = userID
}
}
return session
}
void SignOut(Session session)
{
delete session
}
}
Система авторизации сообщает, что пользователь может делать с ресурсом . Ресурсами могут быть любые объекты, которыми управляет ваше приложение. Они имеют тип и ID . По желанию они могут быть частью одной или нескольких категорий . Пользователи могут выполнять определенные операции на ресурсе в зависимости от его типа и категории. Это определяется разрешением . Разрешения сгруппированы в ролях . Вы можете назначить пользователю ноль или более ролей.
В вашем примере, клиент - это роль. Ресурсом является, например, продукт. Продукт представлен типом продукта, имеет идентификатор и может иметь несколько связанных категорий («Электроника» и «Опасный»). Операции можно рассматривать как варианты глаголов Создать / Читать / Обновить / Удалить. Теперь роль «Клиент» будет содержать набор разрешений, в которых четко указано, что пользователь с этой ролью может делать с управляемыми ресурсами. Например, клиент может только читать определенную информацию о продукте, но не может создавать, обновлять или удалять продукт. Обратите внимание, что если пользователь имеет более одной связанной роли, он получает все разрешения от этих ролей (операция объединения, а не пересечение).
Это только царапает поверхность. Для дальнейшего чтения вы можете найти в Интернете больше статей, которые объясняют эти понятия намного лучше. Это должно указывать вам в правильном направлении.