Доступ к определенным полям методов put / get в службе данных WCF - PullRequest
2 голосов
/ 17 марта 2012

Первые технологии, которые я использую:

  • Модель данных: структура сущности
  • Служба: Служба данных 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.

Я нашел здесь только несколько сообщений, связанных с моей проблемой, но, к сожалению, она не решила мою проблему.

Есть ли у вас какие-либо предложения или решения этой проблемы?

...