ASP.Net マスターページにログインロール名

このQ&Aのポイント
  • ASP.Net マスターページにログインロール名の表示方法について教えてください
  • マスターページではユーザーの最上級のロール名を表示する方法がわかりません
  • LoginView のプロパティやイベントを使って、マスターページにログインロール名を表示したいです
回答を見る
  • ベストアンサー

ASP.Net マスターページにログインロール名

大変お世話になっております。 マスターページに LoginView を配置しております。 これを実際に表示させると、ユーザー名のみが表示されており、 このユーザーの最上級のロール名を表示したいと思っているのですが、 マスターページ以外の、通常ページでは、以下のプログラムが使用できるので どのロールが最上級かわかるのですが、マスターページだとこのプログラムが使用できないのです。     If User.IsInRole("Admins") Then         'この場合は管理者 を指定ラベルに表示     ElseIf User.IsInRole("User") Then         'この場合は一般ユーザー を指定ラベルに表示     End If マスターページではどのようにして、これら所属最上ロール名を記載すればよろしいでしょうか? LoginView のプロパティ、イベントなど を交えお教えいただけますと大変助かります。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • onos
  • ベストアンサー率81% (127/155)
回答No.3

通常のページはPageクラスです。 http://msdn.microsoft.com/ja-jp/library/system.web.ui.page_properties(v=vs.80).aspx ここにUserプロパティが存在しており、Userプロパティで取得できる実体のIPrincipalオブジェクトがIsInRoleメソッドを持っているので、User.IsInRole()という記述ができます。 マスターページのプロパティを確認すると、 http://msdn.microsoft.com/ja-jp/library/system.web.ui.masterpage_properties(v=vs.80).aspx Userプロパティなんてありません。 IsInRoleメソッドが問題ではなく、Userプロパティが取得できないことが問題です。 で、どうするか、というと上記のマスターページのプロパティのなかにPageプロパティがあります。 説明のとおり、マスターページコントロールが含まれているPageのインスタンスが取得できます。 ので、マスターページの中では Page.User.IsInRole() と記述すれば、、、 たぶん動くと思います。 #すみません、確認するとこまではやってません。

kyokotan12
質問者

お礼

onosさん 大変お世話になっております。 いやー、本当にいつも助かっております。 ありがとうございます。 User.IsInRole という使い方しかできないと勝手に思っておりました。 Page の中に Userメンバーがあるんですね! 大変勉強になりました。 本当にありがとうございました。

その他の回答 (2)

  • onos
  • ベストアンサー率81% (127/155)
回答No.2

> 質問を変えさせていただきまして、なぜマスターページだと下記のプログラムが動かないのかがわかりません。 > If User.IsInRole("Admins") Then これが「動かない」というのはどうやって確認しました? ASP.NETの仕組みからマスターページだから動かない、という可能性は低いと考えています。 むしろ、このプログラムをどのように書いて、どうやってその動作の検証を行っているか、が気になります。 もっとはっきりいうと、このプログラムの書き方とか使い方のほうが間違ってるんじゃないか、と考えています。

kyokotan12
質問者

補足

onosさん お世話になります。 > If User.IsInRole("Admins") Then なのですが、マスターページ上でこの記述をすると、 User の中に IsInRole のメンバーがないというエラーになります。 マスターページ上で、 User.IsInRole か、もしくは それ以外で記述の仕方があるようでしたら 教えていただけれると助かります。

  • onos
  • ベストアンサー率81% (127/155)
回答No.1

マスターページにたいして、どのようにこのプログラムを使おうとしているのでしょう? マスターページだからといってこのプログラムが動作しないといったことはないと思います。 このプログラムが問題というより、この結果をどう表示しようとしているか、とかそういった点が問題のような気がします。 で、この質問の内容からはその問題箇所が見えてきません。 ちなみにLoginViewはユーザー名のみが表示されるのが仕様です。 これはマスターページ以外の通常のページでも同様です。

kyokotan12
質問者

補足

onosさん お世話になっております。 LoginViewの仕様だったんですね・・・・ それではしょうがないですね 質問を変えさせていただきまして、なぜマスターページだと下記のプログラムが動かないのかがわかりません。 If User.IsInRole("Admins") Then 通常のページだと問題なく動作するのですが、なぜマスターページだと動かないのか 何か思いつく点などございましたら、アドバイスいただけませんでしょうか?

関連するQ&A

  • ASPでデータを2列に表示させる方法

    ASPでWebページを作成し、ユーザーにユーザー情報(住所、氏名等)を入力してもらうページを作成しました。 Accessに登録されたこのデータを表示させて郵便用のタックラベルを印刷できるASPを作成したいと思います。 タックラベルは2列表示(横2名分、縦8名分、合計16名分)で印刷されます。 どのようにしたら登録データを左右交互に表示させることができるのでしょうか? ASPの作成には、「Dreamweaver MX 2004」を使用しています。ダイナミックページの作成から動的手ブールの作成ツールを使って作成しています。これだと、登録されたユーザーの分だけ、縦方向に印刷されてしまいます。 奇数データの「行揃え」を「左」に設定して、偶数データの「行揃え」を「指定なし」にできれば、左右交互にラベル印刷ができるような気がするのですが、どうしたらいいのか分かりません。 プログラムの知識がないので、難しいことは分かりません。できれば、追加するソースを教えていただけると助かります。どうか宜しくお願い致します。

  • ASP.Net MenuItemDataBound

    大変お世話になっております。 ロールの種類でメニューにある項目の表示・非表示を行いたいのですが、なかなかうまくいきません。 下記のように記述したのですが、どこが間違っているのか、もしくは考え方自体が間違っているのかも含め、何かご指摘などございましたら、是非ご教授いただければ幸いでございます。 何卒よろしくお願い申し上げます。 Protected Sub NavigationMenu_MenuItemDataBound(sender As Object, e As MenuEventArgs) Handles NavigationMenu.MenuItemDataBound     If e.Item.Text = "新規" Then       If Page.User.IsInRole("Observer") Then         e.Item.Enabled = False       End If     End If End Sub

  • Accessログイン権限

    Access2003を使用しています。 ログイン画面を作成しておりログイン自体はできたのですが、 管理者とそうでないユーザーに分けて、ログイン時に管理者であればfrm_mainを、 そうでなければfrm_main2を開くようにしたいのですがうまくいきません。 現在の仕様では、ログイン画面(frm_ログイン)とメイン画面(frm_main、frm_main2)があり テーブル名:tbl_ユーザー フィールド名:ユーザー名、パスワード、アカウント アカウントで"1"が管理者、"2"が一般ユーザー このようになっています。 ーー以下VBAコードーー Private Sub rogin_Click() Dim a If IsNull(Me.[UserName]) Then MsgBox "ユーザー名が未入力です" Me.[UserName].SetFocus ElseIf IsNull(Me.[password]) Then MsgBox "パスワードが未入力です" Me.[password].SetFocus Else a = DLookup("パスワード", "tbl_ユーザー", "ユーザー名='" & Me.[UserName] & "'") If IsNull(a) Then MsgBox "該当する ユーザー名 は存在しません" Me.[UserName].SetFocus ElseIf StrComp(a, Me.[password], vbBinaryCompare) = 0 Then On Error GoTo Err_rogin_Click Dim stDocName As String Dim stLinkCriteria As String If アカウント = "1" Then stDocName = "frm_main" Else stDocName = "frm_main2" End If DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, Me.Name Else MsgBox "パスワードが違います" Me.[password].SetFocus End If End If Exit_rogin_Click: Exit Sub Err_rogin_Click: MsgBox Err.Description Resume Exit_rogin_Click End Sub ーー以上ーー 現在はこのようになっているのですが、これだとなぜかアカウントが"1"でも"2"でも frm_mainが開いてしまいます。 長くなって申し訳ないのですが、アドバイスをお願いします。

  • セッションを使ったログインページでのエラー

    前にもセッションを使ったログインページについて質問したものです。 上記の通りセッションを使ったログインページを作っております。 前回このソースを載せたときセキュリティー的にとても危険だというご意見をいただきました。何分まだ初心者ですのでどうかご了承ください。 ソース /*ログインのページは省略しました。ログイン後ID・パスワードが正しいか、そして訪問者がログインせずにこのページに直接アクセスした際にログインページにジャンプするようにするようにするプログラムです*/ <?PHP if (!isset($user) || !isset($pass)) { header( "Location: loginPage.php" ); } elseif (empty($user) || empty($pass)) { header( "Location: loginPage.php" ); } else { $user = addslashes($_POST['username']); $pass = md5($_POST['password']); $dbHost = "localhost"; $dbUser = "*****"; $dbPass = "*****"; $dbDatabase = "mysql"; $db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database."); mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database."); $result=mysql_query("select * from users where username='$user' AND password='$pass'", $db); $rowCheck = mysql_num_rows($result); if($rowCheck > 0){ while($row = mysql_fetch_array($result)){ session_start(); session_register('username'); echo 'Success!'; header( "Location: checkLogin.php" ); } } else { echo 'Incorrect login name or password. Please try again.'; } } ?> このようなプログラムを作ったのですが、ちゃんとパスワードをいれても、ちゃんと認証されずに、ログインのページ戻されてしまいます。 おそらく if (!isset($user) || !isset($pass)) { header( "Location: loginPage.php" ); } elseif (empty($user) || empty($pass)) { header( "Location: loginPage.php" ); } の部分がおかしいのかと思いますがどう変えたら良いのかよく分かりません。また、おかしいと思った部分を削除したら普通にログインはできるのですが、今度は一度ログインしても他のページに移動した後もう一度このページに行くと、もう一度ログインしないとアクセスできなくなりました。 まとめると、お聞きしたいことは、2つです。 (1)紹介したのプログラムでログインしてもちゃんとログインが認証されない。これを解消するにはどうすればいいのか? (2)ユーザーがログインした後もう一度このページにアクセスした場合もう一度ログインさせなくてもいいようにすればどうすればよいのか。 もし可能でしたら、解決するためのプログラムを(さらに可能でしたら紹介したプログラムを生かした形で)添えてアドバイスしていただけないでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • マスターページの値の渡し方について。

    すごく初歩的な質問かもしれませんが、教えてください。 Visual Web Developer 2008を使用しています。 言語はVBです。 マスターページ:masterpage.master データ表示ページ:datalist.aspx(マスターページはmasterpage.master) マスターページにツリービューがあり、それをクリックすると、データベース内を検索し、該当するものをリストとして表示するのがデータ表示ページになります。 その際の処理として、どのノードがクリックされたかの情報をクエリ文字列にてデータ表示ページに送っていましたが、そうするとポストバックが起きずに、展開されたノードは初期の状態に戻ってしまいます。 抽出したデータを表示させつつも、ツリービューは選択された状態を維持させたいのです。 そこで、いろいろ考えてみたのですが、 1:マスターページに隠しテキストボックスを置き、その中に格納された値を、データ表示ページからFindControlで取得する 2:グローバル変数を使う   ただ、グローバル変数が使えるのか、また使用方法等はまだ調べていません。 3:Friend Sharedを使う   これはグローバル変数とは違うものなんですかね・・・?    いろいろ調べてみたのですが、グローバル変数は宣言する場所がどこなのかわからないという、自分でも情けない状態です。 Friend Sharedの使用方法も微妙です・・・。 隠しテキストボックスを作るやり方は簡単にテストしたらできましたが、極力変数として値を渡す方法でやりたいと思っているので、最終手段にしようと思っています。 目的はノード展開状態の維持なのですが、マスターページからデータ表示ページに値を渡すという流れはそのままでいきたいと思っています。 ポストバック時はノードの展開状態が維持されるとどこかに書いてあったので、ポストバックさせつつ値を渡すのがいいのでは、と思っています。 ご存知の方がいましたら、ヒントでもなんでもいいので教えてください。 足りない情報等は補足いたします。 よろしくお願いします。

  • ASPページを開くとユーザー名とパスワードを聞かれる

    ASP で作製したページを開くとユーザー名とパスワードを入力するダイアログが表示され、キャンセルするとエラーになります。 又、エクセルのデータを開こうとしても同様の現象が起きます。 他のサーバー上で同じ ASP ページ開いても上記のダイアログは表示されません。 ちなみに環境は Windows NT Server 4.0 SP6a IIS 4.0 ASP 2.0 です。 どなたか教えて下さい。

  • パスワード認証 ページに飛べない

    パスワード認証のページを作っています。 パスワードがあっているかどうかで、ページに飛ぶようにしたいのですが、どうも上手くいきません。どこがいけないのでしょうか? $user_pass = "test"; // パスワード $ok = "./ok.htm"; // 認証クリア後に飛ばす相対パス。 $error = "./error.htm"; // 認証ミス後に飛ばす相対パス。 $script = "./login.php"; // このファイル名 $doc_title = "テスト"; // タイトル /*-----------------------------------------------------------*/ /* ログイン処理 /*-----------------------------------------------------------*/ if(!isset($ver)) { $ver = '1.05.1'; } if(!isset($pass)) { $pass = $user_pass; // パスを指定 if($passwd == $pass) { header("Location: $ok"); // OKなら } elseif($passwd) { header("Location: $error"); // NGなら } } ?>

    • ベストアンサー
    • PHP
  • asp.netでのセッションを使用したログイン

    asp.netでmssql server を利用してログイン機能を実装しました。 以下のようなコードでmssqlに保存してあるIDとパスが一致すれば 以降の画面ではセッションにID、パスが保存され page loadでセッションにID、パスがなかればページがすすんでいけないような設定にしています。 機能は問題なく動作しているのですがこのような仕様はセキュリティ上問題はないのでしょうか。 商用サイトではないのですが、ある程度広域に向けたサイトを構築しようと考えておりまして、セキュリティ向上のため、工夫できるようなことがあればご意見いただきたいです。 よろしくお願いいたします。 ************************************************************** ログインページ ************************************************************** Dim staffid As Integer Dim staffname As String Dim adminflag As Boolean Protected Sub btnLogon_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'ユーザーIDの入力チェック If txtUserID.Text = "" Then lblErr.Text = "ユーザーIDを入力してください。" Return End If 'パスワードの入力チェック If txtpassword.Text = "" Then lblErr.Text = "パスワードを入力してください。" Return End If 'ユーザーとパスワードの検証 If Not CheckUserPassword(txtUserID.Text, txtpassword.Text) Then lblErr.Text = "ユーザーIDまたはパスワードが違います。" Return End If 'セッション変数へ値をセットする Session("StaffID") = staffid Session("StaffName") = staffname Session("AdminFlag") = adminflag End Sub Private Function CheckUserPassword(ByVal userid As String, ByVal password As String) As Boolean Dim ret As Boolean Dim strSQL As String strSQL = "SELECT staffID, staff_name, admin_flag , permission FROM tbl_staff " & _ "WHERE userID = '" & userid.Replace("'", "''") & _ "' AND password = '" & password.Replace("'", "''") & "'" '接続文字列を取得する Dim cnStr As String = System.Configuration.ConfigurationManager.ConnectionStrings("hogehogeConnectionString").ConnectionString() 'コネクションを定義する Using connection As New SqlConnection(cnStr) 'コマンドを定義する Dim command As New SqlCommand(strSQL, connection) 'コネクションを開く connection.Open() Try 'コマンドからデータリーダーを定義する Dim dr As SqlDataReader = command.ExecuteReader 'データリーダーから結果を読み込む If dr.Read Then '対象データが存在する場合 '正しいユーザーIDとパスワードが指定されたので、 'データリーダーから読み出したデータをメンバ変数にセットする staffid = dr("staffID") staffname = dr("staff_name") adminflag = dr("admin_flag") permission = dr("permission") ret = True Else '対象データが存在しない場合 '不正なユーザーIDまたはパスワードが指定された ret = False End If Catch ex As Exception '例外処理(SQLエラーなど) ret = False End Try 'コネクションを閉じる connection.Close() End Using '結果を返して終了する Return ret End Function ************************************************************** ログイン後に行くページでの設定 ************************************************************** Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) '[ユーザーID]ボックスにフォーカスをセットする If Session("StaffID") Is Nothing Then Response.Redirect("~/top.aspx") ElseIf Not Session("AdminFlag") = True Then Response.Redirect("~/top_normal.aspx") End If End Sub

  • ASPのログイン制限に関する質問です

    現在ログイン制限のページを作成しているのですがユーザーIDとパスワードを入力した情報を現在作成している関数に渡すとエラーがおきてしまいます。原因がわからないので助言をお願いします。 SQLの定義ですがすべてvarcharです。 以下コード ---------------------------------------------------------- 'ログイン画面からのデータを取得 user_id = Request.form("user_id") password = Request.form("password") function user_check(user_id, password) set objCon = Server.CreateObject("ADODB.Connection") set objRS = Server.CreateObject("ADODB.Recordset") objCon.ConnectionString = "DSN=・・・・;"& _ "UID=root;" & _ "PWD=・・・・・;" objCon.Open '入力した情報と一致するものを探す strSQL = "select person_code, password from person_master" & _ "where code = '" &user_id& "' and password = '" &password& "'" objRS.Open strSQL, objCon, 3 If objRS.EOF or objRS.BOF then user_check = "NG" else user_check = "OK" end If objRS.close set objRS = nothing objRS.close set objCon = nothing end function if user_check(user_id, password) <> "OK" then response.redirect "index.asp" else response.redirect "main.asp" end if

  • VBAでコントロール配列を持つことは可能ですか?

    Excel2002、OSはXPです。 VBではコントロールに配列を持つことが出来ましたが、 VBAでコントロール配列を持つことは可能でしょうか? やりたいことはユーザーフォームにラベルを100個ぐらい貼り付けて、 テキストボックス入力した値がCell(i,1)と等しければ、 i番目のラベルのCaptionに文字を入力したい。という感じです。 もしVBのようにコントロール配列を持てれば、 If TextBox1.text=Cells(i,1) Then Label(i).Caption="~~" という風に出来るのですが、どうも配列の設定がVBのようにできません。 プロパティにINDEXが無いですし、オブジェクト名を同じにしたら エラーとなってしまいますし。。 もし出来ないのであれば、何か回避策のようなものはないでしょうか? 力技で100個IFを書けば出来ることは出来るのですが・・ If TextBox1.text=Cells(i,1) Then If i = 1 Then Label1.Caption="~~" ElseIf i=2 then Label2.Caption="~~" ・・・・

専門家に質問してみよう