読者です 読者をやめる 読者になる 読者になる

1.21 jigowatts

Great Scott!

ASP.NET MVCはじめました~権限による多階層ドロップダウンメニューの表示切り替え

概要

前回の続きというか、前回忘れていた権限によるメニューの表示切り替えです。

環境

権限項目の追加

右端のRoleId項目を追加しました。権限の種類(サンプルではユーザ、チョットできるユーザ、管理者の3種類)ごとに値を設定しておきます。あとはログインユーザごとの権限でメニューの項目を取得してくればOK。

f:id:sh_yoshida:20170329103343p:plain

/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つだけ。

f:id:sh_yoshida:20170329103348p:plain

Power User権限の場合

RoleIdが"1"以下の項目のみで、3階層分の一部だけ。

f:id:sh_yoshida:20170329103352p:plain

Administrator権限の場合

RoleIdが"2"以下の項目のみ、つまり全部表示。

f:id:sh_yoshida:20170329103356p:plain

ソース

github.com

以上、前回の仕様漏れの実装でした。
sh-yoshida.hatenablog.com