浅谈ASP.NET的权限管理和用户验证(转)

网站建设中,会碰到最常用的用户管理及操作权限设置验证,虽然这是很常见的一个管理操作,但要做得完善很不容易。最近参考了许多.NET方面的书,特别关心这方面的,并结合自己特点,摸索了一下适合自己的用户管理方法,完成了基本管理类库。

  用户的管理方法,在设计时采取“用户——角色——许可”三级,这是WINDOWS操作系统的用户管理方法。一个用户可以有多个角色,一个角色也可以有多个许可。

  所以有数据库设计时分别设计:

  用户表:设UserID、用户名、用户信息
  角色表:设RoleID、CategoryID、RoleName、Description
  用户角色表:UserID、RoleID

  分类表:CategoryID、CategoryName、Description
  许可表:PermissionID、CategoryID、PermissionName、Description
  角色许可表:RoleID、PermissionID

  设计好数据库后,即可以从事设计用户、角色、许可的类。类库分数据层类,完成建立、查询、删除、更新等操作。业务层的类,需要实现与数据无关功能,建立如用户拥有角色、许可的列表,验证方式等。

  在业务层有一很重要的方法,即是用.NET的验证方式来实现,因此建立二个类:

  一是 SiteIdentity 类,它继承自业务层基类,并采用System.Security.Principal.IIdentity接口。该类主要存放用户的基本信息,包括用户名、EMAIL及ID号、密码。它的方法较简单,通过验证后,把用户的基本信息。

  二是 HelloseaPrincipal 类,它也继承业务基类,采用System.Security.Principal.IPrincipal接口。该类的主要方法有验证类,并把验证后的用户信息、用户角色列表、许可列表存储到类中。该类中有二个方法和一个Property是IIdentity接口必须的,即IsInRole、HasPermission,和System.Security.Principal.IIdentity Identity。

  设计完成类库后,即可以用来验证用户了。比如在管理登录页面中,需要判断用户的密码是否正确,并判断用户是否有许可进入管理页面。

  下面是验证中的一段:

HelloseaPrincipal admin = HelloseaPrincipal.ValidateLogin(txtAdminName.Text,
txtPassword.Text);
if (admin == null)
{
labInfo.Text = "没有该管理员帐号,或输入密码不正确。";
}
else if ( !admin.HasPermission(1) )
{
labInfo.Text = "您并不是管理角色并且没有管理许可,不能进入本系统。";
}
else
{
Context.User = admin;
FormsAuthentication.SetAuthCookie(txtAdminName.Text, true);
Response.Redirect("AdminIndex.aspx");
}

  注:!admin.HasPermission(1)的1是数据库中许可的ID号

  在内部页面中可以用:

         HelloseaPrincipal currentPrincipal = (HelloseaPrincipal)Context.User;
if (!currentPrincipal.HasPermission(1))
{
}

  这样方法来验证用户,虽然它也是通过Cookie,但.net中的Cookie是加密的,能实现很高的安全性。

  这样的设计还有个缺点,即是许可的ID号是固定值。考虑到一般的管理页面需要的许可比较固定,所以采用把许可设置在config文件中。而一些频道等需要经常变化的验证许可放置在数据库的频道表中。下面是我采用的config文件中设置方法实现,不详细介绍如何读取和写入了。从config文件读取和写入可采用XML串行化和反串行化很容易实现,可以用类来封装,并且在使用时非常方便,下面的语句即是通过封装类中读取许可的方法:

  

if ( !admin.HasPermission(OperatePermissionConfig.GetSettings().ManagerLogin) )
{
}

  关于权限和验证,就介绍到这里,只能简单介绍了。因实现的代码非常长,所以这里只是介绍一种思维方式,具体实现每个人都会有自己特点。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET Identity是一种用于身份验证和授权的框架,可以轻松地将用户身份验证和授权集成到ASP.NET Web应用程序中。下面是使用ASP.NET Identity进行身份验证和授权的步骤: 1. 导入ASP.NET Identity 在ASP.NET Web应用程序中,可以通过NuGet包管理器安装ASP.NET Identity。打开NuGet包管理器控制台,输入以下命令: ``` Install-Package Microsoft.AspNet.Identity.Core ``` 这将安装ASP.NET Identity核心库。 2. 创建用户模型 可以创建自定义的用户模型,也可以使用默认的用户模型。如果要创建自定义的用户模型,需要继承IdentityUser类。例如: ```csharp public class ApplicationUser : IdentityUser { public string FullName { get; set; } } ``` 3. 配置身份验证和授权 在Web.config文件中,需要添加以下配置信息: ```xml <authentication mode="None" /> <identity impersonate="false" /> <roleManager enabled="true" /> ``` 这些配置信息将启用基于表的身份验证和授权。 4. 实现用户注册和登录 使用ASP.NET Identity,可以轻松地实现用户注册和登录。例如,可以使用AccountController中的以下方法: ```csharp public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); return RedirectToAction("Index", "Home"); } AddErrors(result); } return View(model); } public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); switch (result) { case SignInStatus.Success: return RedirectToLocal(returnUrl); case SignInStatus.LockedOut: return View("Lockout"); case SignInStatus.RequiresVerification: return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); case SignInStatus.Failure: default: ModelState.AddModelError("", "Invalid login attempt."); return View(model); } } return View(model); } ``` 5. 实现授权 可以使用ASP.NET Identity实现基于角色的授权。例如,可以使用Authorize属性限制只有特定角色的用户才能访问某些页面: ```csharp [Authorize(Roles = "Admin")] public ActionResult AdminDashboard() { // Only users in the "Admin" role can access this page return View(); } ``` 以上是使用ASP.NET Identity进行身份验证和授权的基本步骤,如果你有更多的问题或疑问,可以告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值