我在使用.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