zoukankan      html  css  js  c++  java
  • [ASP.NET MVC] 使用CLK.AspNet.Identity提供依权限显示选单项目的功能

    [ASP.NET MVC] 使用CLK.AspNet.Identity提供依权限显示选单项目的功能

    CLK.AspNet.Identity

    CLK.AspNet.Identity是一个基于ASP.NET Identity扩展设计的验证授权模块,这个模块提供以角色为基础的访问控制(Role-based access control, RBAC),将系统授权拆解为User(使用者)、Role(角色)、Permission(权限)。让开发人员可以在系统内,定义用户属于哪个角色、哪个角色拥有那些权限、权限可以使用哪些功能。后续使用者通过验证之后,就可以依照角色权限来使用系统功能。

    问题情景

    开发人员在系统内套用CLK.AspNet.Identity后,就可以依照使用者的权限,来限制用户能够使用那些功能。当用户透过浏览器进入权限的功能页面时,就会收到HTTP的403状态代码,用来告知使用者没有权限进入该页面。

    问题情景01

    以提供更好的使用者体验角度来说,用户点击选单项目后,得到没有权限进入该页面的响应。这样的操作流程,很容易让用户失去耐心。为了提供更好的用户体验,系统应该依用户的权限来显示选单项目,只显示有权限可以进入使用的选单项目,用以减少用户操作错误的机会。

    问题情景02

    解决方案

    在套用CLK.AspNet.Identity的系统里,可以使用HasPermission这个扩充方法,来提供依权限显示选单项目的功能。使用方法如下:

    1. 在系统里加入一个新的ProductController、ProductViews,并且依照下列范例程序,加入Method及对应的权限:ProductAddAccess、ProductRemoveAccess。

      public class ProductController : Controller
      {
          [RBACAuthorize(Permission = "ProductAddAccess")]
          public ActionResult Add()
          {
              ViewBag.Message = "Your product add page."; 
              return View();
          }
      
          [RBACAuthorize(Permission = "ProductRemoveAccess")]
          public ActionResult Remove()
          {
              ViewBag.Message = "Your product remove page.";  
              return View();
          }
      }
      
    2. 编辑ViewsShared_Layout.cshtml,并且依照下列范例,使用HasPermission这个扩充方法,来依照用户的权限显示选单项目。

      <div class="col-md-12" style="background-color:#222">
          <div class="container">
              @if (User.HasPermission("ProductAddAccess"))
              { 
                  @Html.ActionLink("Product add", "Add", "Product", null, new { @class = "btn btn-primary" }) 
              }
      
              @if (User.HasPermission("ProductRemoveAccess"))
              { 
                  @Html.ActionLink("Product remove", "Remove", "Product", null, new { @class = "btn btn-primary" }) 
              }
          </div>
      </div>
      
    3. 完成上述程序程序开发工作之后,还需要进入系统,设定用户权力。在下面这个范例中,示范使用Permission管理页面,将权限开放给Admin群组使用。

      解决方案01

    4. 使用预设的管理账号登入(ID:admin@example.com, PW:admin)登入后,可以看到因为admin@example.com属于Admin群组、而Admin群组拥有ProductAddAccess权限,所以系统选单中可以看到Product add这个选单项目。

      解决方案02

    5. 更换使用预设的访客账号登入(ID:guest@example.com, PW:guest)登入后,可以看到因为guest@example.com属于Guest群组、而Guest群组没有ProductAddAccess权限,所以系统选单中看不到Product add这个选单项目。

      解决方案03

  • 相关阅读:
    SQLAlchemy(2) -- SQLAlchemy的安装
    SQLAlchemy(1) -- Python的SQLAlchemy和ORM
    http-proxy-middleware及express实现反向代理
    Vue项目中的http请求统一管理
    vue.js中如何使用scss
    Vue 相关开源项目库汇总
    Vue UI组件库
    route按需加载的3种方式:vue异步组件、es提案的import()、webpack的require.ensure()
    Npoi Web 项目中(XSSFWorkbook) 导出出现无法访问已关闭的流
    vuejs 和 element 搭建的一个后台管理界面
  • 原文地址:https://www.cnblogs.com/clark159/p/4889626.html
Copyright © 2011-2022 走看看