Step01.新增一個含有identity的專案範本
Step02.將專案的identity角色功能打開
在App_Start的IdentityConfig.cs 加入
//增加角色管理員相關的設定 public class ApplicationRoleManager : RoleManager<IdentityRole> { public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore): base(roleStore) { } public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context) { return new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>())); } }
在App_Start的 Startup.Auth.c s的 public void ConfigureAuth(IAppBuilder app) 加入
//增加角色的OwinContext app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
以上這兩個步驟,專案的identity 就具備Role的功能了
Step03.Install-Package MvcSiteMapProvider.MVC5 -Version 4.6.22
Step04. 編輯 Mvc.sitemap 的內容
<?xml version="1.0" encoding="utf-8" ?> <mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0" xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd"> <mvcSiteMapNode title="Home" controller="Home" action="Index"> <mvcSiteMapNode title="首頁" controller="Home" action="Index"/> <mvcSiteMapNode title="關於" controller="Home" action="About"/> <mvcSiteMapNode title="聯絡我們" controller="Home" action="Contact"/> </mvcSiteMapNode> </mvcSiteMap>
Step05. 編輯 _Layout.cshtml 的內容,將原選單內容換成Mvc.sitemap的內容
<ul class="nav navbar-nav"> @Html.MvcSiteMap().Menu(false, true, false) </ul>
這時候你可以執行看看,選單應該還是有些不一樣。
Step06. 編輯Views/Shared/DisplayTemplates/MenuHelperModel.cshtml 的內容
@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel @using System.Web.Mvc.Html @using MvcSiteMapProvider.Web.Html.Models @foreach (var node in Model.Nodes) { <li> @Html.DisplayFor(m => node) @if (node.Children.Any()) { @Html.DisplayFor(m => node.Children) } </li> }
這時候你可以執行看看,選單應該是一樣了。
Step07.在Web.config 增加 Security 的宣告
<appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> <add key="MvcSiteMapProvider_IncludeAssembliesForScan" value="DemoMVCSitemap" /> <add key="MvcSiteMapProvider_UseExternalDIContainer" value="false" /> <add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true" /> //增加這一行 <add key="MvcSiteMapProvider_SecurityTrimmingEnabled" value="true"/> </appSettings>
Step08.註冊兩個帳號,角色分別為 “Admin” 和 “Manager”,在用這兩個帳號登入看看,是否選單會跟著角色不一樣而變化
public class HomeController : Controller { [AllowAnonymous] public ActionResult Index() { return View(); } [Authorize(Roles = "Admin")] public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } [Authorize(Roles = "Manager")] public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } }