簡體   English   中英

如何在視圖中訪問HttpContext.Current.User自定義屬性

[英]How to access HttpContext.Current.User custom attributes in the view

我想從User對象訪問視圖中的一些自定義屬性。 我正在實現用於身份驗證的自定義屬性,並且正在我的global.asax中更改HttpContext.Current.User

這是User

public class User : IPrincipal
{
    ...
    public bool IsAdministrator => IsInRole(RolesConstants.GlobalAdministrator);
    ...
}

這是我在Global.asax設置的地方

    protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
    {
        ...

        var winUser = new User
        {
            EMail = user.Person.Email,
            FirstName = user.Person.FirstName,
            LastName = user.Person.LastName,
            Identity = wi,
            NetworkAccountName = user.UserName,
            UserId = user.UserName,
            Roles = userRoles,
        };

        HttpContext.Current.User = winUser;
    }

例如,我該怎么做?

<button type="button" visible="@User.IsAdministrator" id="btn"></button>

由於User對象已經可以訪問,因此我不想傳遞Model或在視圖中使用字符串,例如@User.IsInRole("Admin")

編輯:我應該使自定義類型派生自IPrinciple並展開像這樣的類型嗎?

...
        IIdentity Identity { get; }
        bool IsInRole(string role);
        bool IsAdministrator;
...

您需要將User屬性強制轉換為自定義類:

@{
    var user = User as MyNamespace.User; // MyNamespace is the namespace of your User class
}

<button type="button" visible="@user.IsAdministrator" id="btn"></button>

[編輯]

另一個使用擴展方法的快捷解決方案:

public static class ViewUserExtensions {

    public static User ToCustom(this IPrincipal principal)
    {
        return principal as User;
    }
}

<button type="button" visible="@User.ToCustom().IsAdministrator" id="btn"></button>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM