2014-12-03 111 views
0

我想寫一些自定義驗證beforeSaveEntities(或beforeSaveEntity)需要驗證當前登錄的用戶是所保存字段的所有者。我遇到的問題是如何訪問當前用戶。beforeSaveEntities驗證與額外的參數

我具有分配給該驗證用戶令牌等,並存儲在Request.Properties授權用戶控制器的授權屬性,但是我不能訪問HttpRequestMessage內部beforeSaveEntities。是否有最好的做法,即使只有當前用戶的userID進入這些功能?

回答

2

最簡單的方法是給你的ContextProvider子類一個屬性來保存你的用戶信息。然後在您的網絡控制器的方法,你必須:

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

然後在ContextProviderBeforeSaveEntities方法將有機會獲得用戶。

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'方法的內容。希望這可以幫助!