servicestack,Permissions,servicestack" /> servicestack,Permissions,servicestack" />

Permissions Servicestack 4.5.6角色和权限

Permissions Servicestack 4.5.6角色和权限,permissions,servicestack,Permissions,servicestack,我在某处丢失了一个突破性的更改—我今天从一个非常旧的版本(4.0.x)升级了ServiceStack,并在HasRole和HasPermission上找到了类型为IAuthRepository的新参数。我的项目不使用IAuthRepository,因此注入的AuthRepo返回null。当我在下面的HasRole行上设置断点时,我可以看到会话变量的Roles属性中的字符串,但是HasRole()返回false 我的所有RequiresRole、RequiresAnyRole也都失败了,就好像我的

我在某处丢失了一个突破性的更改—我今天从一个非常旧的版本(4.0.x)升级了ServiceStack,并在HasRole和HasPermission上找到了类型为IAuthRepository的新参数。我的项目不使用IAuthRepository,因此注入的AuthRepo返回null。当我在下面的HasRole行上设置断点时,我可以看到会话变量的Roles属性中的字符串,但是HasRole()返回false

我的所有RequiresRole、RequiresAnyRole也都失败了,就好像我的服务没有定义角色一样(但我可以在我的session.roles变量中看到它们)

公共类AppUniversalSearchService:服务
{
公共IAuthRepository AuthRepo{get;set;}
任何公共对象(AppUniversalSearch请求)
{
var session=base.SessionAs();
if(session.HasRole(“CanAccessPD”,AuthRepo))
{
}
}
}

AuthUserSession
进行了重构,以使用
IAuthRepository
(如果存在)。还应填充
UserAuthId
,但由于这仅在
IAuthRepository
存在时才需要,因此验证检查已移动到中需要时

您可以升级到包含此更改的版本,也可以覆盖客户用户会话类中的
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);
}
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);
}