我有一个情况,我有一个非常大的C#对象,但是,我只需要返回一些属性(可以在嵌套对象上),允许客户端JavaScript修改这些属性,然后发送生成的对象返回服务器以执行就地部分反序列化.
我们的想法是重用一些非常大的现有业务对象,但要智能化,只能序列化并仅将这些属性发送回客户端应用程序进行修改(以便将传输的数据量保持在最低水平).
我基本上有一个XML文件,我使用"路径语法"预先定义所有绑定,这只表示我需要序列化的那些属性.所以,我可以使用"WorkOrder.UserField1"或"WorkOrder.Client.Name"之类的东西.
我尝试使用自定义合约解析程序来确定是否应该序列化属性; 但是,我似乎没有关于"路径"(换句话说,链中对象模型中的其他属性)的信息,以确定属性是否应该序列化.
我也尝试使用自定义的JsonTextWriter,但似乎我不能覆盖跟踪路径所需的方法,即使有可用的Path属性.为了能够查看被序列化的属性的路径层次结构并确定是否应该通过在表中查找路径并做出决定来序列化,是否有一些我可能会忽略的东西?
好的,ASP.NET核心中基于自定义策略的授权.我有点理解这个新的身份框架的想法,但仍然没有100%清楚你可以用这个来实现.假设我们在HomeController中有一个名为List的Action.此操作将查询并显示数据库中的产品列表.必须访问此列表的用户必须是Marketing部门的一部分.因此,在我们的政策中,我们检查用户是否有一个名为Division的声明,其值是Marketing.如果是,那么他将被允许查看列表,否则不会.我们可以像这样装饰我们的动作:
[Authorize(Policy = "ProductsAccess")]
public IActionResult List()
{
//do query and return the products view model
return View();
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好.它会很完美.
场景1:如果我想在产品级别添加策略,并且根据策略,用户将只看到其部门的产品,该怎么办?所以营销人员会看到他的产品,研发人员会看到他的等等.我怎样才能做到这一点?是否可以通过政策完成?如果有,怎么样?
场景2:在现场级访问怎么样?让我们说也许我想要隐藏某些字段?示例:所有产品都有某些必须对Managers可见且对其他用户隐藏的列?可以使用自定义策略完成吗?如果有,怎么样?
我正在我的网站上创建一个小应用程序,以使用API请求获取用户信息.
[HttpGet("GetUserInfo/{user_id}/{fields?}")]
public IActionResult GetUserInfo(string user_id, params string[] fields)
{
var userProfile = _userManager.GetUserProfile(user_id);
if (userProfile == null)
{
return Ok(null);
}
var userInfo = new
{
id = userProfile.UserId,
email = userProfile.Email,
name = userProfile.Name,
// I don't want to define a null property here:
picture_url = fields.Contains("picture_url") ? "path" : null
};
if (fields.Contains("picture_url"))
{
userInfo.picture_url = "";
}
return Ok(userInfo);
}
Run Code Online (Sandbox Code Playgroud)
当一个请求是有效的,则它返回其包含3个属性默认JSON对象:id
,email
,和name
.
现在,我想检查一下,如果请求想要获得有关此用户的更多信息,就像picture_url
.所以,我试过了:
if (fields.Contains("picture_url"))
{
// error in …
Run Code Online (Sandbox Code Playgroud)