我有一个基于C#的asp.net应用程序,它可以进行基于表单的身份验证,也需要授权。
以下是User
表(SQL Server)
UID UName PasswordHash Userroles
----------------------------------------------
1 a GERGERGEGER Proivder;Data Entry
2 b WERGTWETWTW HelpDSK; UserNamager
...
...
我非常熟悉身份验证部分。但是对于授权,我不确定最好的方法是什么:
我知道一旦用户被授权,您就可以使用Identity对象来获取他/她的信息。
问题是我选择在每个页面上读取登录用户的角色,而不是每次都调用该数据库表来获取它们?
答案 0 :(得分:-1)
我不确定这是一个SQL Server问题。这是一个ASP.NET问题。
ASP.NET表单身份验证允许应用程序定义“Principal”,其中包含一个称为“角色”的字符串数组。您可以从DB一次填充角色(当用户登录时),然后将主体序列化为表单身份验证票证,该票证将成为浏览器上的加密cookie。 ASP.NET使用每个http请求对cookie进行解码,并通过HttpContext.User将其提供给ASP.NET c#代码。然后,它可以从上下文中检索角色,而不需要再次与DB通信。
存储角色看起来像this:
string roles = "Admin,Member";
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
userId, //user id
DateTime.Now,
DateTime.Now.AddMinutes(20), // expiry
false, //do not remember
roles,
"/");
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);