Фильтрация DTO по роли или детальному разрешению - PullRequest
0 голосов
/ 27 сентября 2018

Есть ли способ фильтрации DTO на основе разрешений?

Например:

class User {
    int id {get; set}
    string secretInfo {get; set}
    string publicInfo {get; set}
}

Если клиент запрашивает данные, удаляйте только secretInfo без создания нового объекта?Создание и управление ими для каждого разрешения становится настоящей болью.

Если у меня есть пользователи с правами администратора и без прав, я должен создать новый DTO для каждого разрешения?Или есть способ с атрибутами или что-то подобное, что может фильтровать данные?Или это плохая практика?

1 Ответ

0 голосов
/ 28 сентября 2018

Я вижу три разных способа решения этой проблемы:

Унаследованный интерфейс и затем приведение его к выбранному интерфейсу (общедоступному или частному):

interface IPublicUser {
    int id {get; set;}
    string publicInfo {get; set;}
}

interface ISecretUser : IPublicUser {
    string secretInfo {get; set;}
}
class User : ISecretUser {
    int id {get; set;}
    string secretInfo {get; set;}
    string publicInfo {get; set;}
}

Управление данными внутрисвойства

class User : ISecretUser {
    int id {get; set;}
    bool accessGranted {get; set;}
    string secretInfo {
      get {
            if (accessGranted)
              return _secretInfo;
            else
              return null;
          }
      set {
            if (accessGranted)
              _secretInfo = value;
          }
    }
    string _secretInfo;
    string publicInfo {get; set;}
}

Третий способ - использование двух разных моделей ViewModel, где вы можете управлять тем, что показывать пользователю ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...