当角色存储在SQL Server数据库中时,如何为Web应用程序填充用户(标识)角色

时间:2015-03-31 18:36:38

标签: c# asp.net sql-server vb.net

我有一个基于C#的asp.net应用程序,它可以进行基于表单的身份验证,也需要授权。

以下是User表(SQL Server)

的简化版本
UID   UName PasswordHash Userroles
----------------------------------------------
1      a    GERGERGEGER   Proivder;Data Entry
2      b    WERGTWETWTW   HelpDSK; UserNamager
...
...

我非常熟悉身份验证部分。但是对于授权,我不确定最好的方法是什么:

我知道一旦用户被授权,您就可以使用Identity对象来获取他/她的信息。

问题是我选择在每个页面上读取登录用户的角色,而不是每次都调用该数据库表来获取它们?

1 个答案:

答案 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);