- PR -

ページにアクセス権を設定したいのですが(ASP.NET VB)

投稿者投稿内容
さよこ
ベテラン
会議室デビュー日: 2005/10/13
投稿数: 78
投稿日時: 2007-06-28 11:07
こんにちは。
各ユーザに権限コードを持たせ、各ページにアクセス権を設定し、表示権限が無ければエラーページにジャンプさせようと思っています。
権限コードは1,2,4,8,16とし、アクセス権の設定は権限コードの合計とします。
例えば、権限コード1及び4、16の人のみアクセス可能にしたい場合、アクセス権の設定は21を設定します。
権限コードの合計が他の権限コードと重複することは無いので、合計値から権限を持っていることは判定可能だと思うのですが(少なくとも頭の中では判定できるのですが)、それをどのようにプログラムコードで判定すればよいのかわかりません。(1を最上位とし、より上位の権限を持ったユーザには必ず表示権限あるといった設定なら、順番に足し算していけばわかるのですが・・・)
頭が悪い上に、説明が下手ですいません。
よろしくお願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-06-28 11:25
共通型システムの列挙型
http://msdn2.microsoft.com/ja-jp/library/6e3t9w21(VS.80).aspx
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-28 11:32
2進数に変換して、ビットのオンオフで判断すればいいのでは?
って、はずしてるか???(汗
_________________
かるあ のメモスニペット
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-28 11:33
それともその後のユーザの承認のはなし?
http://msdn2.microsoft.com/ja-jp/library/53s18z5c(VS.80).aspx
_________________
かるあ のメモスニペット
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-06-28 11:41
ASP.NET 2.0なら、ユーザの管理やロールによるアクセス権の設定といった仕組みが組み込まれています。
ロールを組み合わせて権限を設定することも可能です。
このような仕組みを利用することは考えないんでしょうか。。。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-06-28 11:59
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_10/idnfw11_10_01.html
これのことですかね。
さよこ
ベテラン
会議室デビュー日: 2005/10/13
投稿数: 78
投稿日時: 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
で、順番に、上位の権限コードを足し算していって、合計が権限設定と一致すればよいようにしています。
ここを何とか修正して、上位の権限のユーザは必ず許可が与えられるという条件を外し、自由に設定できるように変更したいのです。
すいません。書いてる最中にもレスを頂いていて、追いついていけてないです。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-28 12:43
ソースコードは見てないですが、
大きな数字から引いていけばいいんじゃないですか?
引いてマイナスにならなければ権限はあるんですよね。

スキルアップ/キャリアアップ(JOB@IT)