![](/img/trans.png)
[英]How to get HttpContext.Current.User as custom principal in mvc c#
[英]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.