ASP.NET MVCはじめました~権限による多階層ドロップダウンメニューの表示切り替え
概要
前回の続きというか、前回忘れていた権限によるメニューの表示切り替えです。
環境
- Visual Studio Community 2015
- ASP.NET MVC5
- BootStrap 3.3.7
- jQuery 3.1.1
権限項目の追加
右端のRoleId項目を追加しました。権限の種類(サンプルではユーザ、チョットできるユーザ、管理者の3種類)ごとに値を設定しておきます。あとはログインユーザごとの権限でメニューの項目を取得してくればOK。
■/Models/MenuItem.cs
public enum Role { User, PowerUser, Administrator, } public class Navigation { public Navigation() : this(role: Role.User) { } public Navigation(Role role) { this.RoleId = (int)role; } public int RoleId { get; } public IEnumerable<NavigationLink> Menu { get { var menu = new List<NavigationLink>(); using (var context = new AppDbContext()) { var data = context.MenuItems .Where(n => n.RoleId <= RoleId) .OrderBy(n => n.Order) .ToList(); var mainMenu = data.Where(n => n.ParentId == null); foreach (var item in mainMenu) { NavigationLink linkItem = MappingLinkItems(item); menu.Add(linkItem); } SetChildMenu(menu, data); } return menu; } } #region helper method... }
実行結果
User権限の場合
RoleIdが"0"以下の項目のみなので、メインメニューの3つだけ。
Power User権限の場合
RoleIdが"1"以下の項目のみで、3階層分の一部だけ。
Administrator権限の場合
RoleIdが"2"以下の項目のみ、つまり全部表示。