Вместо того, чтобы изменять роль пользователя в промежуточном программном обеспечении, вы рассматривали вопрос о том, чтобы сохранить модель базы данных в базе данных, которая отображает роль данного пользователя для каждой организации? Затем вы можете разрешить / запретить запросы в промежуточном программном обеспечении на основе запрошенного домена и уровня разрешений пользователя в этом домене.
Например, Джон Смит принадлежит двум организациям с ID 1 и 2. Модель разрешений пользователей может выглядит примерно так:
UserPermissionLevel
------------------------------------------------
| Uid | Name | OrganizationId | RoleId |
|----------------------------------------------|
| 1 | John Smith | 1 | 1 |
| 1 | John Smith | 2 | 2 |
| 2 | Jane Doe | 2 | 1 |
------------------------------------------------
И у вас будет отдельная таблица, содержащая разрешения Role, например:
Role
-------------------------------------
| RoleId | Name | CanGet | CanPost |
|-----------------------------------|
| 1 | Admin | True | True |
| 2 | Basic | True | False |
-------------------------------------
Используя эту модель, вы можете запросить эти таблицы в промежуточном программном обеспечении. определить соответствующий уровень доступа.
public class OrgAuthorizationMiddleware
{
...
public async Task Invoke(HttpContext context, MyDbContext databaseContext)
{
// Check that the user has the requested role and the
// appropriate permission for the request as needed.
// Add additional request type logic to check user's
// specific permissions from UserPermissionLevel.
if databaseContext.Role.Any(x => x.RoleId, RoleId)
{
await _next.Invoke(context);
}
else
{
context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
}
}
}