beforeSaveEntities使用额外参数进行验证

时间:2014-12-03 22:07:18

标签: breeze

我正在尝试在beforeSaveEntities(或beforeSaveEntity)中编写一些自定义验证,需要验证当前登录的用户是要保存的字段的所有者。我遇到的问题是如何访问当前用户是谁。

我有一个分配给控制器的授权属性,用于验证用户令牌等,并将授权用户存储在Request.Properties中,但我无法访问HttpRequestMessage内的beforeSaveEntities。是否有最佳做法可以将当前用户的userID传递给这些函数?

2 个答案:

答案 0 :(得分:2)

最简单的方法是为您的ContextProvider子类提供一个属性来保存您的用户信息。然后在您的Web控制器方法中,您将拥有:

[HttpPost]
public SaveResult SaveChanges(JObject saveBundle) {
    var contextProvider = new MyContextProvider(User currentUser);
    return contextProvider.SaveChanges(saveBundle);
}

然后BeforeSaveEntities中的ContextProvider方法可以访问用户。

答案 1 :(得分:0)

我花了一些时间来研究如何实现上面的答案,所以在这里添加了我的ContextProvider重载。

public class MyContextProvider : EFContextProvider<MyContext>
{
    //The new local user object
    private System.Security.Principal.IPrincipal User;

    public CameraContextProvider(System.Security.Principal.IPrincipal user) : base()
    {
        this.User = user;
    }

    protected override bool BeforeSaveEntity(EntityInfo entityInfo) 
    {
        if (!User.IsInRole("Admin"))
        {
             //whatever validations etc you need!
        }
    }
}

然后,在这个问题中使用Steve描述的'SaveChanges'方法的内容。希望这有帮助!