限制在Breeze.js中创建新实体

限制在Breeze.js中创建新实体,breeze,Breeze,假设我想使用Breeze创建一个任务实体(我使用的是EF),但是因为这是一个真正的任务应用程序,所以任务必须与当前登录的用户相关联。任务有UserId外键,需要在保存期间填充这些外键,这就是我遇到的问题。在大多数客户端应用程序中执行此操作对我来说是一个陌生的概念。我不能很好地在客户端指定UserId外键,因为我不希望一个聪明的用户可能会为另一个用户创建任务。我从何处开始连接到保存过程,以使用当前登录的用户(在本例中为System.Web.HttpContext.Current.user.Iden

假设我想使用Breeze创建一个任务实体(我使用的是EF),但是因为这是一个真正的任务应用程序,所以任务必须与当前登录的用户相关联。任务有UserId外键,需要在保存期间填充这些外键,这就是我遇到的问题。在大多数客户端应用程序中执行此操作对我来说是一个陌生的概念。我不能很好地在客户端指定UserId外键,因为我不希望一个聪明的用户可能会为另一个用户创建任务。我从何处开始连接到保存过程,以使用当前登录的用户(在本例中为System.Web.HttpContext.Current.user.Identity.Name)填充UserId FK

请随意为我指出另一篇文章或文档的方向。正如我所说的,这对我来说是一个新概念,所以我真的不知道该搜索什么


无论谁回答这个问题,我都全心全意地爱你

请查看Breeze网站上有关的文档。您需要创建自己的提供程序并实现BeforeSaveEntity方法。在该方法中,您可以将任务的UserId设置为当前用户,就像使用MVC4一样

public class TasksContextProvider: EFContextProvider<YourExistingDbContext>  
{

  public override bool BeforeSaveEntity(EntityInfo entityInfo) 
  {
    if (entityInfo.Entity.GetType() == typeof(YourTask)
        && entityInfo.EntityState == EntityState.Added) 
    {
      // add your logic here to set the user and/or do validation
    }
  }

}
公共类任务ContextProvider:EFContextProvider
{
公共覆盖bool BeforeSaveEntity(EntityInfo EntityInfo)
{
if(entityInfo.Entity.GetType()==typeof(YourTask)
&&entityInfo.EntityState==EntityState.Add)
{
//在此处添加逻辑以设置用户和/或执行验证
}
}
}

您的站点使用哪种身份验证?答案可能取决于这些信息。在另一个非Breeze MVC 4项目中,我可以在WebAPI控制器操作中轻松访问System.Web.HttpContext.Current.User以执行编程安全检查,因此我希望我可以使用Breeze控制器执行类似的操作。过滤查询中的数据很容易。在需要在服务器上填充某些属性的情况下处理新记录的创建是我遇到的难题(我也不知道如何在纯WebAPI控制器中实现)。在一个相关的注释中,我希望我不必阅读成堆的Breeze文档来有效地使用该工具,但如果我不这么做的话,我会朝自己的脚开枪的。问题是,我以为微风的作用是制造东西。。。。微风。现在微风开始显得有些复杂了。我想我需要看看breeze提供的功能是否值得我为正确使用它而付出的努力。我记得过去的好日子,我所要做的就是在我的页面代码中添加一个公共静态WebMethod。新的MVC4SPA模板演示了ASP表单身份验证和将用户信息传递给控制器的方法。该模板即将发布的Breeze版本展示了如何按照Bryant的建议(感谢Bryant!)将用户信息应用到
BeforeSaveEntity
中。我对复杂性问题表示同情。我们分享您对文档的反应:文档越多,我们就越担心。我不会买一个有很大手册的烤面包机。不幸的是,我们都在构建软件。虽然使用Breeze有一条简单的“不思考”的primrose路径,但当您开始添加特定于应用程序的关注点(按用户过滤您自己的数据)时,您就偏离了这条路径,走向了丛林。这些文件是你的森林生存指南。我们希望知道更好的方法。我们欢迎提出建议。