私はgridviewを持つasp.netページを持っています。グリッドビューの特定の列は、ユーザーが特定の役割にある場合、つまりHttpContext.Current.User.IsInRole(XXX)がtrueを返す場合にのみ表示されるようにしたいと考えています。グリッドビューの列を特定の役割のユーザーにのみ表示するにはどうすればよいですか?
これを行う最も簡単な方法は何ですか?
私はこのコードをページコードビハインドではなく私のASPコードに簡単に入れることができます。
私はgridviewを持つasp.netページを持っています。グリッドビューの特定の列は、ユーザーが特定の役割にある場合、つまりHttpContext.Current.User.IsInRole(XXX)がtrueを返す場合にのみ表示されるようにしたいと考えています。グリッドビューの列を特定の役割のユーザーにのみ表示するにはどうすればよいですか?
これを行う最も簡単な方法は何ですか?
私はこのコードをページコードビハインドではなく私のASPコードに簡単に入れることができます。
私は自分のサイトの1つでこの手法を使用しました。
If Roles.IsUserInRole(Profile.UserName, "This Role") Then
productGridview.Columns(2).Visible = False
End If
もちろん、この場合2は非表示にする列のインデックスを表します。
ここではいくつかのオプションを考えることができますが、いくつかはハックの種類です。
HttpContext.Current.User.IsInRole(xxx)
関数の結果にJavaScript変数を設定してから、問題のあるコントロールをjQueryで削除します。 `$(" control_type [id $ =] ")セレクタを使って同様のことをしました。FindControl("ID")
関数を使用して、各グリッドから非表示にするコントロールを取得し、それぞれにVisible = false
を設定します。<div>
タグをプレースホルダーとして使用し、IsInRole()の結果に基づいてjQuery load()関数(適切なaspxページへの参照)を呼び出すことができます。カラムを自動生成している場合は、使用しているクラスコンストラクタ/関数にIsInRole()の結果を渡して、そのようにカラムを非表示にすることができます。
私はこのようなことをしました。しかし、私はいくつかのテーブルに列を持っている(そして列は各テーブルで異なっている)ので、列は各テーブルで同じインデックスを持たないでしょう。このようなインデックスを使用せずに何らかの方法で列を参照することができれば本当にうれしいでしょう。 –