基本上这是作为相关帖子之一出现的:
使用breezejs 在javascript 中查询信息不是很危险吗?
我的第一个问题是关于某人的,但是接受那里的回答,如果有人有关于如何限制客户可见范围的示例或教程,我将不胜感激。
我从 Knockout/Breeze 模板开始,并根据我正在做的事情对其进行了更改。坐在一个几乎完成的项目上,有一个问题。安全。我已经修复了身份验证,并且正在努力进行授权,并试图弄清楚如何确保人们无法获得不打算让他们看到的东西。
我将第一层固定在根模型上,即成员只能看到他创建的或公开的东西。但是用户可能会使用扩展来获取 Object.Member.Identities 的查询。这意味着他获得了公共对象的所有身份。
是否有任何教程可以帮助我限制用户可能查询的内容。?我应该用 ObjectDto 包装返回的对象,并且在创建它时我可以验证它不包含敏感信息吗?
很好,这取决于我如何做,但有些教程会很好用一些指针。
代码
控制器
public IQueryable<Project> Projects()
{
//var q = Request.GetQueryNameValuePairs().FirstOrDefault(k=>k.Key.ToLower()=="$expand").Value;
// if (!ClaimsAuthorization.CheckAccess("Projects", q))
// throw new WebException("HET");// UnauthorizedAccessException("You requested something you do not have permission too");// HttpResponseException(HttpStatusCode.MethodNotAllowed);
return _repository.Projects;
}
_存储库
public DbQuery<Project> Projects
{
get
{
var memberid = User.FindFirst("MemberId");
if (memberid == null)
return (DbQuery<Project>)(Context.Projects.Where(p=>p.IsPublic));
var id = int.Parse(memberid.Value);
return ((DbQuery<Project>)Context.Projects.Where(p => p.CreatedByMemberId == id || p.IsPublic));
}
}