- - PR -
ページにアクセス権を設定したいのですが(ASP.NET VB)
1|2|3
次のページへ»
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-06-28 11:07
こんにちは。
各ユーザに権限コードを持たせ、各ページにアクセス権を設定し、表示権限が無ければエラーページにジャンプさせようと思っています。 権限コードは1,2,4,8,16とし、アクセス権の設定は権限コードの合計とします。 例えば、権限コード1及び4、16の人のみアクセス可能にしたい場合、アクセス権の設定は21を設定します。 権限コードの合計が他の権限コードと重複することは無いので、合計値から権限を持っていることは判定可能だと思うのですが(少なくとも頭の中では判定できるのですが)、それをどのようにプログラムコードで判定すればよいのかわかりません。(1を最上位とし、より上位の権限を持ったユーザには必ず表示権限あるといった設定なら、順番に足し算していけばわかるのですが・・・) 頭が悪い上に、説明が下手ですいません。 よろしくお願いします。 |
|
投稿日時: 2007-06-28 11:25
共通型システムの列挙型
http://msdn2.microsoft.com/ja-jp/library/6e3t9w21(VS.80).aspx |
|
投稿日時: 2007-06-28 11:32
2進数に変換して、ビットのオンオフで判断すればいいのでは?
って、はずしてるか???(汗 _________________ かるあ のメモ と スニペット |
|
投稿日時: 2007-06-28 11:33
それともその後のユーザの承認のはなし?
http://msdn2.microsoft.com/ja-jp/library/53s18z5c(VS.80).aspx _________________ かるあ のメモ と スニペット |
|
投稿日時: 2007-06-28 11:41
ASP.NET 2.0なら、ユーザの管理やロールによるアクセス権の設定といった仕組みが組み込まれています。
ロールを組み合わせて権限を設定することも可能です。 このような仕組みを利用することは考えないんでしょうか。。。 |
|
投稿日時: 2007-06-28 11:59
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_10/idnfw11_10_01.html
これのことですかね。 |
|
投稿日時: 2007-06-28 12:03
ありがとうございます。
・・・すいません。頭が弱くて、頂いたレスに追いつかない状態です・・・。 もともと、より上位の権限を持ったユーザには許可を与えるという考えで、作ってしまっているのです。(以下、読みにくいコードをだらだら書くことをお許し下さい。) Private Sub New() Dim objDoc As New XmlDocument Dim objNodeList As XmlNodeList Dim i As Integer m_create = True Try objDoc.Load(ConfigurationManager.AppSettings("XML_PAGEPERMISSIONPATH")) objNodeList = objDoc.DocumentElement.SelectNodes("page") For i = 0 To objNodeList.Count - 1 ReDim Preserve m_permission(1, i) m_permission(0, i) = Trim(objNodeList.Item(i).ChildNodes.Ite(0).InnerText) m_permission(1, i) = Trim(objNodeList.Item(i).ChildNodes.Item(1).InnerText) Next Catch ex As Exception m_createErrMsg = ex.Message m_create = False End Try End Sub Public Sub Check_Permission(ByVal page As CPageBase) '/////////////////////////// 'ページの表示許可をチェック '/////////////////////////// Dim aryAuth As Integer() = Get_Permission() Dim fAuth As Boolean = False Dim intPerm As Integer = -1 'ページの許可設定値 Dim intCount As Integer = 0 Dim i As Integer If IsNothing(page.Session(CConst.CSSNUSERINFO)) Then page.Session.Clear() FormsAuthentication.SignOut() page.Response.Redirect(ConfigurationManager.AppSettings("PAGE_PERMISSIONERR")) Else intCount = CType(page.Session(CConst.CSSNUSERINFO), UserInfo).Auth End If For i = 0 To m_permission.GetUpperBound(1) If page.PageName = m_permission(0, i) Then intPerm = CInt(m_permission(1, i)) Exit For End If Next If intPerm = -1 Then Exit Sub End If For i = 0 To aryAuth.GetUpperBound(0) If aryAuth(i) <> CType(page.Session(CConst.CSSNUSERINFO), UserInfo).Auth Then intCount += aryAuth(i) End If If intCount = intPerm Then fAuth = True Exit For End If Next If fAuth = False Then page.Session.Clear() FormsAuthentication.SignOut() page.Response.Redirect(ConfigurationManager.AppSettings("PAGE_PERMISSIONERR")) End If End Sub Private Function Get_Permission() As Integer() '/////////////////// 'アクセス権限を取得 '////////////////// Dim objCon As New SqlConnection(ConfigurationManager.ConnectionStrings("SQLCon").ConnectionString) Dim objSql As New StringBuilder Dim objCmd As New SqlCommand Dim objReader As SqlDataReader Dim intAuth As Integer() Dim i As Integer = 0 With objSql .Append("SELECT ISNULL(権限コード,0) AS 権限コード ") .Append("FROM M_権限 ") .Append("ORDER BY 権限コード ASC ") End With objCmd.CommandText = objSql.ToString objCon.Open() objCmd.Connection = objCon objReader = objCmd.ExecuteReader(CommandBehavior.CloseConnection) Do While (objReader.Read) ReDim Preserve intAuth(i) intAuth(i) = CInt(objReader("権限コード")) i += 1 Loop Return intAuth End Function 設定ファイルXML <?xml version="1.0" encoding="utf-8" ?> <root> <page> <name>sales</name> <permission>15</permission> </page> <page> <name>divsales</name> <permission>15</permission> </page> </root> このコードの、 For i = 0 To aryAuth.GetUpperBound(0) If aryAuth(i) <> CType(page.Session(CConst.CSSNUSERINFO), UserInfo).Auth Then intCount += aryAuth(i) End If If intCount = intPerm Then fAuth = True Exit For End If Next で、順番に、上位の権限コードを足し算していって、合計が権限設定と一致すればよいようにしています。 ここを何とか修正して、上位の権限のユーザは必ず許可が与えられるという条件を外し、自由に設定できるように変更したいのです。 すいません。書いてる最中にもレスを頂いていて、追いついていけてないです。 |
|
投稿日時: 2007-06-28 12:43
ソースコードは見てないですが、
大きな数字から引いていけばいいんじゃないですか? 引いてマイナスにならなければ権限はあるんですよね。 |
1|2|3
次のページへ»