我在某处丢失了一个重大改变 - 我今天从一个相当旧的版本(4.0.x)升级了ServiceStack,并在HasRole和HasPermission上找到了类型为IAuthRepository的新参数。我的项目没有使用IAuthRepository,因此注入的AuthRepo返回null。当我在下面的HasRole行上设置断点时,我可以看到会话变量的Roles属性中的字符串,但HasRole()返回false。
我的所有RequiresRole,RequiresAnyRole也都失败了,好像我的服务没有定义角色(但我可以在session.Roles变量中看到它们)。
waveView
答案 0 :(得分:3)
重构AuthUserSession
以使用IAuthRepository
(如果存在)。我们还预计会填充UserAuthId
,但仅在IAuthRepository
存在时才需要这样做,验证检查已移至this commit中需要的时间}。
您可以升级到包含此更改的v4.5.7 on MyGet,也可以覆盖客户用户会话类中的HasRole
,例如:
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);
}