2017-11-29 15 views
-1

私のアプリケーションでは、各ユーザーはclientidですが、複数のrolesがあります。たとえば、ユーザーJohnについてはユーザーのプロパティに応じて、表示/非表示のコントロールを制御します。

は私が達成したい何

userz、USERX = = 1 clientidrolesを持つユーザーのclientidrole

に関する自分のアプリケーションのコントロールを表示または非表示することである私は、この配列を持っています私の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 | nullControlは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())

答えて

0

私は完全に質問を理解していない、それはそれを行うにはかなり恐ろしい方法に見えるを持つことができます...しかし、私あなたが探していると思う:

あなたが使用する可能性があります
var userroles = Roles.GetRolesForUser(HttpContext.Current.User.ToString()); 
    if (c.role_available.Split(',').Any(cr => userroles.Any(ru => ru.RoleName== cr))) 
        { 

          (this.Page.FindControl(c.controlid)).Visible = true;      
        } 
    else{ 
     (this.Page.FindControl(c.controlid)).Visible = false; 
    } 
0

Roles.IsUserInRole 

try 
    { 
    if (!Roles.IsUserInRole(User.Identity.Name, "Administrators")) 
    { 
     Msg.Text = "You are not authorized to view user roles."; 
     UsersListBox.Visible = false; 
     return; 
    } 
    } 
    catch (HttpException e) 
    { 
    Msg.Text = "There is no current logged on user. Role membership cannot be verified."; 
    return; 
    } 

Roles.IsUserInRoleメソッド(String)

https://msdn.microsoft.com/en-us/library/4z6b5d42(v=vs.110).aspx

0

まあ、私はIntersectを使用してこのコードを使用:

string[] roles = Roles.GetRolesForUser(HttpContext.Current.User.Identity.Name); 

if (c.role_hidden.Split(',').Intersect(roles).Any()) 
        { 
         (this.Page.FindControl(c.controlid)).Visible = false; 
関連する問題