【发布时间】:2018-12-09 20:15:02
【问题描述】:
因为角色不包含权限。我对 ServiceStack 中的角色和权限有点困惑。看来他们真的是一回事?我想实现一个具有角色和权限的组。基于 servicestack 默认实现,我认为我无法扩展提供程序并获取嵌套信息。
我将如何实现这一点并仍然使用身份验证属性。 如果我有一个属性
[RequiredPermission("CanAccessPerm")]
That is in Role:HasAccessRole That is in Group:HasAccessGroup
我只想使用 perms 来确定 API 级别的访问权限。然后角色和组来确定谁有权限。如果角色包含权限,那么我可以扩展 CredentialsAuthProvider TryAuthenticate 并另外查看组表。有没有办法做到这一点而不重写整个身份验证?
编辑 12/12 我在用 容器.注册(c => 新的 OrmLiteAuthRepository(c.Resolve()) { UseDistinctRoleTables = AppSettings.Get("UseDistinctRoleTables", true), }); 如何获得 IManage 角色?我知道我可以覆盖 IAuthRepository。
我找到了这个链接。但它不能替代 Auth ServiceStack - roles and permissions
-_Edit 12/29 -- 它没有调用 MyOrmLiteAuthRepository 中的方法。你知道为什么吗?
AppHost.cs
container.Register<IAuthRepository>(c =>
new MyOrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>())
{
UseDistinctRoleTables = AppSettings.Get("UseDistinctRoleTables", true),
});
CustomAuthRepo
public class MyOrmLiteAuthRepository : OrmLiteAuthRepository
{
public MyOrmLiteAuthRepository(IDbConnectionFactory dbFactory) : base(dbFactory) { }
public MyOrmLiteAuthRepository(IDbConnectionFactory dbFactory, string namedConnnection = null)
: base(dbFactory, namedConnnection)
{
DbFactory = dbFactory;
NamedConnnection = namedConnnection;
}
public IDbConnectionFactory DbFactory { get; set; }
public string NamedConnnection { get; set; }
public override ICollection<string> GetPermissions(string userAuthId)
{
var permissions = base.GetPermissions(userAuthId);
using (var ss = HostContext.ResolveService<SecurityService>(new BasicRequest()))
{
permissions = ss.UserPermissions(Convert.ToInt32(userAuthId));
}
return permissions;
}
public override bool HasPermission(string userAuthId, string permission)
{
var hasPermission = base.HasPermission(userAuthId, permission);
using (var ss = HostContext.ResolveService<SecurityService>(new BasicRequest()))
{
hasPermission = ss.UserHasPermInRoleOrGroup(permission, Convert.ToInt32(userAuthId));
}
return hasPermission;
}
}
【问题讨论】:
标签: servicestack