GenericPrincipal.IsInRole

GenericPrincipal.IsInRoleで、そのユーザが指定されたロールに所属しているか判定する。

GenericPrincipal.IsInRole(String) メソッド (System.Security.Principal) | Microsoft Docs

まず、users.xmlを、

このように変更する。
testuser1がadminで、testuser2がusers。
main.aspxは、

adminに含まれているか、usersに含まれているか、判定する。

testuser1なら
testuser1なら

testuser1なら、

admin
admin

admin。

testuser2なら
testuser2なら

testuser2なら、

users
users

users。

Sample/aspnet/GenericPrincipal/IsInRole/src/GenericPrincipal_ at master · bg1bgst333/Sample · GitHub

HttpContext.User

GenericPrincipalが出来たら、それをHttpContext.Userにセットすると、遷移先ページからユーザ情報が見れる。

HttpContext.User プロパティ (System.Web) | Microsoft Docs

Global.asax.csで、

Context.Userにprincipalをセットして、
main.aspxを追加し、

Page.Userを取得して、それが何か見る。
(Page.Userは間違いで、本当はUserにすべきだったんだけど、本質的には変わらない。)
ログインすると、

testuser1とかちゃんと入ってるのが見える
testuser1とかちゃんと入ってるのが見える

testuser1とかちゃんと入ってるのが見える。

IPrincipalでもらってるけど、中身はGenericPrincipal。
IPrincipalでもらってるけど、中身はGenericPrincipal。

IPrincipalでもらってるけど、中身はGenericPrincipal。

Sample/aspnet/HttpContext/User/src/HttpContext_ at master · bg1bgst333/Sample · GitHub

GenericPrincipal(identity,roles)

FormsIdentityが出来たら、それを使って、今度はGenericPrincipalを生成する。

GenericPrincipal(IIdentity, String[]) コンストラクター (System.Security.Principal) | Microsoft Docs

Global.asax.csで、

コンストラクタにidentityとroleを渡して、GenericPrincipalを生成。

こんな感じで生成される
こんな感じで生成される

こんな感じで生成される。

Sample/aspnet/GenericPrincipal/GenericPrincipal_identity_roles/src/GenericPrincipal_ at master · bg1bgst333/Sample · GitHub

FormsIdentity(ticket)

FormsAuthenticationTicketが取得できたなら、そこからFormsIdentityを生成する。

FormsIdentity コンストラクター (System.Web.Security) | Microsoft Docs

Global.asax.csで、

コンストラクタにticketを渡して、FormsIdentityを生成。

こんな感じで生成される。
こんな感じで生成される。

こんな感じで生成される。

Sample/aspnet/FormsIdentity/FormsIdentity_ticket/src/FormsIdentity_ at master · bg1bgst333/Sample · GitHub

FormsAuthenticationTicket.UserData

FormsAuthenticationTicketを使う理由として、ユーザ名とともに独自のデータを送ることが出来る点がある。
以前やったFormsAuthenticationTicketのコンストラクタの最後の引数には、userDataという文字列を指定出来た。
ここにrole文字列を指定しておくと、FormsAuthenticationTicket.UserDataからアクセスできる。

FormsAuthenticationTicket.UserData プロパティ (System.Web.Security) | Microsoft Docs

Default.aspxで、

コンストラクタでroleを指定してる。
Global.asax.csで、

ticket.UserDataからroleを取り出す。

testuser1は
testuser1は

testuser1は、

usersロールである
usersロールである

usersロールである。

Sample/aspnet/FormsAuthenticationTicket/UserData/src/FormsAuthenticationTicket_ at master · bg1bgst333/Sample · GitHub

FormsAuthentication.Decrypt

FormsAuthentication.Encryptで、FormsAuthenticationTicketを暗号化したので、FormsAuthentication.Decryptで復号化する。

FormsAuthentication.Encrypt(FormsAuthenticationTicket) メソッド (System.Web.Security) | Microsoft Docs

Global.asax.csで、

こうすると、

とりあえず復号化出来たっぽい。
とりあえず復号化出来たっぽい。

とりあえず復号化出来たっぽい。

Sample/aspnet/FormsAuthentication/Decrypt/src/FormsAuthentication_ at master · bg1bgst333/Sample · GitHub