私のアプリケーションでは、各ユーザーはclientid
ですが、複数のroles
があります。たとえば、ユーザーJohnについてはユーザーのプロパティに応じて、表示/非表示のコントロールを制御します。
は私が達成したい何
userz、USERX = = 1 clientid
とroles
を持つユーザーのclientid
とrole
に関する自分のアプリケーションのコントロールを表示または非表示することである私は、この配列を持っています私のDB内:
[dbo].[MyMenus](
[id] [int] IDENTITY(1,1) NOT NULL,
[controlid] [nvarchar](500) NULL,
[clientid_available] [nvarchar](50) NULL,
[clientid_hidden] [nvarchar](50) NULL,
[role_available] [nvarchar](500) NULL,
[role_hidden] [nvarchar](500) NULL
ここで、clientid_available、clientid_hidden、role_available、role_hiddenにはカンマで区切られた値が入ります。コントロールにclientid_availableがある場合、clientid_hiddenはnullであり、その逆もあります。 role_availableとrole_hidden
例についても同じこと:0 | Control1 | 0,1 | null | userx | null
Control
はUSERXの役割にClientIDが0,1を持つユーザーとユーザーに表示されることを意味ここ
var hiddenControls = from c in dc.MyMenus
where c.clientid_hidden != null || c.role_hidden != null
select c;
var visibleControls = from c in dc.MyMenus
where c.clientid_available != null || c.clientid_available != null
select c;
foreach (var c in hiddenControls)
{
if (c.clientid_hidden != null)
{
if (c.clientid_hidden.Contains(clientId.ToString()))
(this.Page.FindControl(c.controlid)).Visible = true;
else
(this.Page.FindControl(c.controlid)).Visible = false;
}
//Code for role handling
}
foreach (var c in visibleControls)
{
if (c.clientid_available != null)
{
if (c.clientid_available.Contains(clientId.ToString()))
(this.Page.FindControl(c.controlid)).Visible = true;
else
(this.Page.FindControl(c.controlid)).Visible = false;
}
//Code for role handling
}
しかし、私はロールハンドリングのロジックを知らない。 role_available
ので、role_hidden
は「」で区切って複数の値を持つことができ、現在のユーザーが複数の役割Roles.GetRolesForUser(HttpContext.Current.User.ToString())