2014-12-03 4 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); 
} 

Тогда метод BeforeSaveEntities в ContextProvider будет иметь доступ к пользователю.

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! 
     } 
    } 
} 

Затем, используя содержимое метода SaveChanges, описанного Стивом в этом вопросе. Надеюсь это поможет!

Смежные вопросы