2017-04-24 17 views
0

Userオブジェクトから私のビューのカスタム属性にアクセスしたいとします。私は認証のためのカスタム属性を実装しています。私はHttpContext.Current.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から派生作るべきであるとこのようなタイプを爆発させますか?

カスタムクラスに Userプロパティをキャストする必要が
... 
     IIdentity Identity { get; } 
     bool IsInRole(string role); 
     bool IsAdministrator; 
... 
+0

ビューで@Userを使用できますか? –

+0

カスタムの 'RazorViewBase'クラスを作成し、それからビューを派生させることができます。カスタムクラスは、独自のビューへのユーザー実装を提供できます。 –

+0

@ケビン、そうです –

答えて

2

@{ 
    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> 
+0

拡張メソッドはサーバー側でのみアクセスできます。それを実装するための何かが欠けていますか?私はむしろビューの変数よりもそれを持っているだろう –

+0

もちろん、ビューはサーバー側でレンダリングされます。ビュー内に正しいusingステートメントを追加することを忘れないでください。拡張メソッド '@using MyNamespace'を使用できます。ここで、' MyNamespace'は 'ViewUserExtensions'クラスを含む名前空間です。 –

+0

Doh、ありがとう! –

関連する問題