たとえば、ユーザー数が数種類の固定的なものなのであれば、ユーザー名を 適当な文字(タブとかカンマとか改行とか)で区切りって Tag に放り込んでおき、 実行時には、ユーザー名がその中に含まれているかどうかで可視判断するとか。
一方、ユーザーが固定的では無く、メンバーの増減があるもののだとしたら、 そのユーザーを管理するための情報がどこかにあるはずですよね。 ActiveDirectory とかファイルとかデータベースとかに。 その場合、ユーザーを識別するための ID となるものもそこにある筈なので、 それを Tag に登録すれば良いのではないでしょうか。
For Each ctrl As Control In 対象コントロール Dim sRole As String = TryCast(ctrl.Tag, String) If currentRole = YourAppRole.None OrElse Len(sRole) <> 4 Then ctrl.Visible = False Else ctrl.Visible = sRole(currentRole - 1).Equals("1"c) End If Next
========================================================================== 【例2】「A:可変、B:許可と拒否の両方、C:多対多」 -------------------------------------------------------------------------- ・権限情報は、SQL Server のテーブルで管理されている。 'ロールテーブル ' 権限ID int NOT NULL ' 機能ID NVARCHAR2(32) NOT NULL ' 利用可 BIT NOT NULL Dim tblRole As DataTable = GetRoleFromServer(…)
Dim q1 = From row In tblRole Where row.Field(Of Integer)("権限ID") = roleId Select ID = row.Field(Of String)("機能ID"), Vibile = row.Field(Of Boolean)("利用可") For Each ctrl In 対象コントロール Dim ctrlID As String = TryCast(ctrl.Tag, String) If ctrlID IsNot Nothing Then Dim q2 = From row In q1 Where row.ID = ctrlID Order By row.Visible If q2.Any() Then If Not q2.First().Vibile Then ctrl.Visible = False '拒否ロールが最優先 Else ctrl.Visible = q2.Last().Vibile End If Else '拒否も許可もしないので Visible はデザイン時のまま End If End If Next