2017-01-31 8 views
2

Я где-то потерял перемену - я обновил ServiceStack от довольно старой версии сегодня (4.0.x) и нашел новый параметр типа IAuthRepository на HasRole и HasPermission. Мой проект не использует IAuthRepository, поэтому вложенный AuthRepo возвращает null. Когда я устанавливаю точку останова на строке HasRole ниже, я вижу, что строки в свойстве Roles переменной сеанса, но HasRole() возвращает false.Servicestack 4.5.6 сломал HasRole и HasPermission

Все мои требования требуютRole, RequiresAnyRole также не работают, как будто моя служба не имеет определенных ролей (но я могу видеть их в моей переменной session.Roles).

public class AppUniversalSearchService : Service 
{ 
    public IAuthRepository AuthRepo { get; set; } 

    public object Any(AppUniversalSearch request) 
    { 
     var session = base.SessionAs<DVAuthUserSession>(); 

     if (session.HasRole("CanAccessPD", AuthRepo)) 
     { 
     } 
    } 
} 

ответ

3

AuthUserSession был переработан, чтобы использовать в IAuthRepository, если он существует. Также ожидалось, что был заполнен UserAuthId, но поскольку это требуется только тогда, когда существует IAuthRepository, проверка проверки была перенесена, когда это необходимо в this commit.

Вы можете либо перейти на v4.5.7 on MyGet, который включает в себя эти изменения или отменять HasRole в классе Session клиента пользователя, например:

public class DVAuthUserSession : AuthUserSession 
{ 
    public override bool HasPermission(string permission, IAuthRepository authRepo) => 
     this.Permissions != null && this.Permissions.Contains(permission); 

    public override bool HasRole(string role, IAuthRepository authRepo) => 
     this.Roles != null && this.Roles.Contains(role); 
}