你的位置:首页 > 软件开发 > ASP.net > [.NET领域驱动设计实战系列]专题七:DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能

[.NET领域驱动设计实战系列]专题七:DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能

发布时间:2015-06-15 12:00:15
一、引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作。此时客户会在自己的订单状态看到店家已经发货。从上面的业务逻辑可以看出,当用户下完订单之后,店家或管理员可以对客户订单进行跟踪和操作。上一专题我们已经实现创建 ...

[.NET领域驱动设计实战系列]专题七:DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能

一、引言

 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作。此时客户会在自己的订单状态看到店家已经发货。从上面的业务逻辑可以看出,当用户下完订单之后,店家或管理员可以对客户订单进行跟踪和操作。上一专题我们已经实现创建订单的功能,则接下来自然就是后台管理功能的实现了。所以在这一专题中将详细介绍如何在网上书店案例中实现后台管理功能。

二、后台管理中的权限管理的实现

   后台管理中,首先需要实现的自然就是权限管理了,因为要进行商品管理等操作的话,则必须对不同的用户指定的不同角色,然后为不同角色指定不同的权限。这样才能确保普通用户不能进行一些后台操作。

  然而角色和权限的赋予一般都是由系统管理员来操作。所以在最开始创建一个管理员用户,之后就可以以管理员的账号进行登录来进行后台操作的管理,包括添加角色,为用户分配角色、添加用户等操作。

  这里就牵涉到一个权限管理的问题了。系统如何针对不同用户的全新进行管理呢?

  其权限管理一个实现思路其实如下:

  • 不同角色可以看到不同的链接,只有指定权限的用户才可以看到与其对应权限的操作。如只有管理员才可以添加用户和为用户赋予权限,而卖家只能对消费者订单的处理和对自己商店添加商品等操作。

  从上面的描述可以发现,权限管理的实现主要包括两部分:

  1. 为不同用户指定不同的链接显示。如管理员可以看到后台管理的所有链接:包括角色管理,商品管理,用户管理、订单管理,商品分类管理,而卖家只能看到订单管理,商品管理和商品类别管理等。其实现就是为这些链接的生成指定不同的权限,只有达到权限用户才进行生成该链接
  2. 既然要为不同用户指定不同的权限,则首先要获得用户的权限,然后根据用户的权限来动态生成对应的链接。

  有了上面的思路,下面就让我们一起为网上书店案例加入权限管理的功能:

  首先,我在Layout.cshtml页面加入指定权限的链接,具体的代码如下所示:

<table width="996" border="0" cellspacing="0" cellpadding="0" align="center">    <tr>      <td height="607" valign="top">        <table width="996" border="0" cellspacing="0" cellpadding="0">          <tr>            <td width="300" height="55" class="logo"></td>            <td width="480" class="menu">               <ul class="sf-menu">                <li>@Html.ActionLink("首页", "Index", "Home")</li>                @if (User.Identity.IsAuthenticated)                {                <li>@Html.ActionLink("我的", "Manage", "Account")                  <ul>                    <li>@Html.ActionLink("订单", "Orders", "Home")</li>                    <li>@Html.ActionLink("账户", "Manage", "Account")</li>                    <li>@Html.ActionLink("购物车", "ShoppingCart", "Home")</li>                  </ul>                </li>                }                 @if (User.Identity.IsAuthenticated)                {                  <li>@Html.ActionLinkWithPermission("管理", "Administration", "Admin", PermissionKeys.Administrators | PermissionKeys.Buyers | PermissionKeys.SalesReps)                    <ul>                      <li>@Html.ActionLinkWithPermission("销售订单管理", "Orders", "Admin", PermissionKeys.Administrators | PermissionKeys.SalesReps)</li>                      <li>@Html.ActionLinkWithPermission("商品分类管理", "Categories", "Admin", PermissionKeys.Administrators | PermissionKeys.Buyers)</li>                      <li>@Html.ActionLinkWithPermission("商品信息管理", "Products", "Admin", PermissionKeys.Administrators | PermissionKeys.Buyers)</li>                      <li>@Html.ActionLinkWithPermission("用户账户管理", "UserAccounts", "Admin", PermissionKeys.Administrators)</li>                      <li>@Html.ActionLinkWithPermission("用户角色管理", "Roles", "Admin", PermissionKeys.Administrators)</li>                    </ul>                  </li>                }                <li>@Html.ActionLink("关于", "About", "Home")                  <ul>                    <li>@Html.ActionLink("Online Store 项目", "About", "Home")</li>                    <li>@Html.ActionLink("联系方式", "Contact", "Home")</li>                  </ul>                </li>              </ul>            </td>            <td width="216" class="menu">              @{Html.RenderAction("_LoginPartial", "Layout");}            </td>          </tr>        </table>        <table width="100%" border="0" cellspacing="0" cellpadding="0">          <tr>            <td width="100%" height="10px" />          </tr>        </table>        <table width="996" border="0" cellspacing="0" cellpadding="0">          <tr>            <td>              <img src='/images/loading.gif' data-original="http://www.cnblogs.com//images/header.jpg"  width="996" height="400" border="0"></td>          </tr>        </table>        <table width="996" border="0" cellspacing="0" cellpadding="0">          <tr align="left" valign="top">            <td width="202" height="334">              @{Html.RenderAction("CategoriesPartial", "Layout");}            </td>            <td width="20">&nbsp;</td>            <td width="774">              <table width="774" border="0" cellspacing="0" cellpadding="0">                <tr>                  @(MvcSiteMap.Instance.Navigator())                </tr>                <tr>                  <td>                    @RenderBody()                  </td>                </tr>              </table>            </td>          </tr>        </table>        <table width="996" border="0" cellspacing="0" cellpadding="0">          <tr>            <td>              <img src='/images/loading.gif' data-original="http://www.cnblogs.com//images/footer.jpg"  width="996" height="5"></td>          </tr>          <tr>            <td height="76">              <table width="996" border="0" cellspacing="0" cellpadding="0" align="center">                <tr>                  <td width="329" height="78" align="right"></td>                  <td width="14">&nbsp;</td>                  <td width="653"><span class="style7">@Html.ActionLink("主页", "Index", "Home")&nbsp; | &nbsp;&nbsp;@Html.ActionLink("所有分类", "Category", "Home", null, null)&nbsp;&nbsp;|&nbsp;&nbsp; @Html.ActionLink("我的账户", "Account", "Account")&nbsp;&nbsp; |&nbsp;&nbsp; @Html.ActionLink("联系我们", "Contact", "Home")&nbsp;&nbsp; |&nbsp;&nbsp;@Html.ActionLink("关于本站", "About", "Home")</span><br>                    版权所有 &copy; 2014-2015, Online Store, 保留所有权利。 </td>                </tr>              </table>            </td>          </tr>        </table>      </td>    </tr>  </table>

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:[.NET领域驱动设计实战系列]专题七:DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能

关键词:.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。