Authoriseという独自のAuthorize属性を作成しました...
Imports System.Security.Principal
<AttributeUsage(AttributeTargets.Method Or AttributeTargets.[Class], Inherited:=True, AllowMultiple:=True)>
Public Class AuthoriseAttribute
Inherits AuthorizeAttribute
Public Overrides Sub OnAuthorization(filterContext As AuthorizationContext)
Dim CookieName As String = FormsAuthentication.FormsCookieName
If Not filterContext.HttpContext.User.Identity.IsAuthenticated OrElse filterContext.HttpContext.Request.Cookies Is Nothing OrElse filterContext.HttpContext.Request.Cookies(CookieName) Is Nothing Then
HandleUnauthorizedRequest(filterContext)
Return
End If
Dim AuthCookie = filterContext.HttpContext.Request.Cookies(CookieName)
Dim AuthTicket = FormsAuthentication.Decrypt(AuthCookie.Value)
Dim Roles As String() = AuthTicket.UserData.Split(","c)
Dim UserIdentity = New GenericIdentity(AuthTicket.Name)
Dim UserPrincipal = New GenericPrincipal(UserIdentity, Roles)
filterContext.HttpContext.User = UserPrincipal
MyBase.OnAuthorization(filterContext)
End Sub
End Class
これを行ったので、次のように属性でrolesパラメーターを使用できます...
<Authorise(Roles:="Admin")>
これは、承認が必要な私のページで完全に機能します。ただし、承認を必要としない(したがって、承認属性を持たない)メインページでは、ユーザーが(a)ログインしているか、(b)管理者であるか、いいえ。例えば...
@If HttpContext.Current.User.Identity.IsAuthenticated Then
' Display a welcome message (this works)
@If HttpContext.Current.User.IsInRole("Admin") Then
' Display a settings link (this does not work)
End If
End If
「ウェルカムメッセージ」の部分は起動しますが、「設定リンク」の部分は起動しません。このビューにはAuthorize属性がないため、これは理にかなっています。
Authorize属性を持たないページでIsInRoleを確認するにはどうすればよいですか?