1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

カスタムタグヘルパーでタグの表示/非表示切り替え(権限対応)ASP.NET CORE Custom TagHelper

Last updated at Posted at 2024-01-27

やりたいこと

・ASP.NET CORE 環境下
・Webアプリ
・ログインユーザーの権限でタグ(<button>や<div>)の表示/非表示切り替え
・できるだけ簡潔に実現

実行結果イメージ

利用者=ALL(全権限)の場合
1.jpg

利用者=test1の場合
2.jpg

test2権限が割り振られていた test2ボタンと test2 divが非表示になった。

実装方法(HTML側のイメージ)

<button authcode="test1">test1 ボタン</button>  
<button authcode="test2">test2 ボタン</button>  
<button>authcodeなし ボタン</button>  

<div authcode="test1">
    test1 div
</div>
<div authcode="test2">
    test2 div
</div>
<div>
    authcodeなし div
</div>

authcode="test1"
これが権限に対応します。test1利用者に対応します。

authcode="test2"
こちらは。test2利用者に対応します。

実装方法(C#側のイメージ)

using Microsoft.AspNetCore.Razor.TagHelpers;

namespace CustomTagHelper.Pages
{
    // authcodeに対応させるタグをアノテーションで指定
    [HtmlTargetElement("div", Attributes = "authcode")]
    [HtmlTargetElement("button", Attributes = "authcode")]
    public class AuthTagHelper : TagHelper
    {
        public string authcode { get; set; } = string.Empty;

        public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            // 条件に合致しない場合はタグを非表示
            if (!IsAuthorizedToShow(authcode))
            {
                output.SuppressOutput();
            }
            return Task.CompletedTask;
        }
        private bool IsAuthorizedToShow(string authCode)
        {
            // AuthCodeとユーザー名に基づいて表示可否を判定
            // サンプルの判定ロジック
            if (User.Name == "ALL") return true;
            return (authCode == User.Name);
        }
    }
}

自由なロジックで権限判定可能です。

今回は条件に該当した場合、
output.SuppressOutput();
しているのでタグの出力そのものが無くなります。

Disabled(非表示以外)

3.jpg

実装方法(C#側のイメージ)

public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
    // --- 非表示の場合 ---------------
    // 条件に合致しない場合はタグを非表示
    // output.SuppressOutput();

    // --- disabledの場合 ---------------
    // 'disabled' 属性を追加
    output.Attributes.SetAttribute("disabled", "disabled");
    // 必要に応じてスタイルやクラスも追加できる
    output.Attributes.SetAttribute("class", "btn-disabled");
}

完全なソース

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?