c# - 按角色或细粒度权限过滤 DTO
问题描述
有没有办法根据权限过滤 DTO?
举个例子:
class User {
int id {get; set}
string secretInfo {get; set}
string publicInfo {get; set}
}
如果客户端请求数据,只删除 secretInfo 而不创建新对象?为每个权限创建和管理它们变得非常痛苦。
如果我有管理员和非管理员用户,我必须为每个权限创建一个新的 DTO?或者有没有一种方法可以过滤数据?或者这是一个不好的做法?
解决方案
我可以看到三种不同的方法来解决这个问题:
继承的接口,然后将其转换为所选接口(公共或私有):
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,您可以在其中管理向用户显示的内容......
推荐阅读
- python - 如何修复字典值重新定义而不改变另一个列表的值?
- php - 使用 git 拉取生产
- reactjs - 如何在反应中将数据插入firestore时增加id(doc)?
- math - 基于附近点的点的平均高度
- azure - 集成 Azure Function、服务总线和 SignalR
- go - 我不明白返回函数的结果
- android - SQLite 没有立即插入记录
- node.js - Azure Bot 已部署但无法工作错误,因为 Invalid AppId 传递了令牌
- c# - 如何:在爱普生热敏打印机上进行独立 C# 打印
- react-native - react-native-router-flux addListener 不起作用