我在使用.net声明主体验证用户身份时。在我们的系统中,用户有多个权限(最多可以有70个)。使用JSON字符串将多个值添加到1个用户声明中
现在,而不是在每个请求上查询数据库,用户让我认为将权限作为索赔存储是很好的。我尝试将每个权限作为单独的声明存储,但即使达到10个权限也会极大地提高权限的大小。
因此,不要为1个权限添加1个索赔,我想知道如果我将所有权限都添加到1个索赔中,它是否会产生不同的结果,并且确实如此。它保持令牌的大小很小,但我有我需要的权限。
现在要做到这一点,我必须将我的所有权限从一个数组转换成JSON字符串,然后将它们保存为我的声明。为了得到声明,我可以将字符串反序列化为一个数组,并且我根本不必查询数据库。
这可以做到这一点,或者这是非常不好的做法?我在做一个定时炸弹,它会很快爆炸吗?
例这里
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
// get user permissions
var permissions = await _permissionService.GetAllAsync(user);
// create list of all permissions
List<object> claimPermissions = new List<object>();
foreach (var item in permissions)
{
claimPermissions.Add(new
{
Action = item.Action,
Type = item.Type
});
}
// convert list to json
var json = Newtonsoft.Json.JsonConvert.SerializeObject(claimPermissions);
// add claim
identity.AddClaim(new Claim("Permissions", json));
没有人对此有什么看法? – Gillardo 2015-02-27 10:19:11
我想有人回答这个问题。忘记权限部分,并把它作为70+项目。这会不好做法? – Mike 2017-06-29 13:58:27