Первые технологии, которые я использую:
- Модель данных: структура сущности
- Служба: Служба данных WCF
Я только что написал приложение службы данных WCF. Я добавил пользовательские действия по аутентификации / авторизации, чтобы обеспечить некоторые ограничения для предотвращения удаления, обновления и т. Д. Доступа для всех пользователей.
Работает нормально, но сейчас у меня новая проблема.
Пользователь, который может редактировать User_table, он также может удалить флаг IsBanned из своей учетной записи или изменить свою роль ...
Например, у меня есть следующая модель сущности:
User_table
-----------
id
user_id
name
is_banned
role
Моя реализация ролей доступа находится в ProcessingPipeline.ProcessingRequest , где я анализирую httpContext, где я ищу метод http и имя таблицы.
Для фильтрации данных, возвращаемых пользователю, я использую перехватчики. Например, мой перехватчик запросов выглядит следующим образом:
[QueryInterceptor("User_table")]
public Expression<Func<User_table, bool>> OnTagt() {
MyPrincipal user = HttpContext.Current.User as MyPrincipal;
if( user.IsInRole("NormalUser") )
return o => o.user_id == user.id;
else
throw new DataServiceException("You must be logged in");
}
Конечно, я использую некоторые столбцы, которые я не хочу показывать пользователю в моих методах аутентификации / авторизации, поэтому я не хочу удалять их из модели данных.
Кроме того, в зависимости от того, к какой роли принадлежит пользователь, он будет видеть разные столбцы.
Самое простое решение, которое приходит мне в голову, - это создать отдельные модели данных для каждой роли. Это может быть очень страшно и проблематично.
Я не хочу просматривать пользователей из-за их низкоуровневой поддержки в EF.
Я нашел здесь только несколько сообщений, связанных с моей проблемой, но, к сожалению, она не решила мою проблему.
Есть ли у вас какие-либо предложения или решения этой проблемы?