首页 > 解决方案 > 按角色或细粒度权限过滤 DTO

问题描述

有没有办法根据权限过滤 DTO?

举个例子:

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

如果客户端请求数据,只删除 secretInfo 而不创建新对象?为每个权限创建和管理它们变得非常痛苦。

如果我有管理员和非管理员用户,我必须为每个权限创建一个新的 DTO?或者有没有一种方法可以过滤数据?或者这是一个不好的做法?

标签: c#asp.net-core

解决方案


我可以看到三种不同的方法来解决这个问题:

继承的接口,然后将其转换为所选接口(公共或私有):

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,您可以在其中管理向用户显示的内容......


推荐阅读