Я не могу получить наши тесты, чтобы передать атрибут RequiredPermission
в нашем сервисе ServiceStack. Может ли кто-нибудь помочь мне выяснить, где я ошибаюсь?ServiceStack RequiredPermission не подтверждает моего пользователя
Предполагается, что RequiredPermission
использует список session.Permissions
.
Наша UserViewModel
настроен следующим образом
public class UserViewModel : ViewModelBase
{
public UserViewModel()
{
Groups = new List<GroupModel>();
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; } // This should never be populated on the way out.
public IList<GroupModel> Groups { get; set; }
}
GroupModel похож со списком SecuritySettings
в нем. Каждый вызов Service Layer возвращает полностью гидратированный UserViewModel, содержащий список групп, и каждая группа содержит список SecuritySettings.
Когда пользователь Идентифицирует, мы запускаем этот
public override void OnAuthenticated (IServiceBase authService,
IAuthSession session,
IOAuthTokens tokens,
Dictionary<string, string> authInfo)
{
session.Id = _userViewModel.Id.ToString();
session.UserName = _userViewModel.Email;
session.FirstName = _userViewModel.FirstName;
session.DisplayName = string.Format("{0} {1}", _userViewModel.FirstName, _userViewModel.LastName);
session.Roles = new List<string>();
session.Permissions = new List<string>();
if (_userViewModel.Groups != null)
{
foreach (var group in _userViewModel.Groups)
{
// Add user Groups to "Roles"
session.Roles.Add(group.Name);
if (@group.SecuritySettings == null) continue;
foreach (var securitySetting in @group.SecuritySettings)
{
// Add group SecuritySettings to "Permissions"
session.Permissions.Add(securitySetting.Name);
}
}
}
var mapper = new AutoMapper<UserModel>();
_container.Register(mapper.BuildFrom(_userViewModel));
//Important: You need to save the session!
authService.SaveSession(session, SessionExpiry);
}
Проблема у меня в том, что мои тесты все еще возвращаются «Несанкционированное» на моем методе UserServiceInterface
[RequiredPermission("Read User")]
public object Get(UserRequest request)
{
return new UserResponse { User = _userService.GetById(request.Id) };
}
Я могу подтвердить, что UserViewModel.Groups[0].SecuritySettings[0].Name == "Read User"
.
Я только что нашел проблему. Добавление 'base.OnAuthenticated (authService, session, tokens, authInfo);' мой метод OnAuthenticated' передавал данные сеанса туда, куда ему нужно было идти. –
@ChaseFlorell отличный, хороший материал! – mythz
Спасибо за вашу помощь и за создание такого замечательного продукта. –