如何根据登录用户角色显示aspx页面的某些部分

Par*_*kht 4 asp.net user-roles

我有一个asp.net网站..每个页面都有一些内容,每个登录用户都有一些角色..我想隐藏和显示页面的内容基于登录用户角色..我可以这样做?谢谢.PS:我知道asp.net中的身份验证和授权表单...我的问题是关于页面的内容.

要么

我想知道是否有一些.ascx(用户控件),然后将它们添加到.aspx页面..然后根据可见性属性和用户角色隐藏并显示aspx页面的部分..这是最好的方法?谢谢.

Par*_*kht 8

我终于找到了合适的答案..我不想设置可见性属性(是的,它不难猜测!),因为它使我的代码变脏并且不方便...假设我有页面Default.aspx并且那里在Default.aspx页面中有3个角色Admin,A,B ....我想根据用户角色显示内容,所以我使用Loginview和它的模板,如下所示:

<asp:LoginView runat="server" ID="loginviewControl1">
   <AnonymousTemplate>
        <asp:HyperLink runat="server" ID="lnkLogin" Text="Log In" NavigateUrl="~/Account/Login.aspx"></asp:HyperLink>
   <Anonymous:AnonymousPart ID = "anonym" runat="server" />
   </AnonymousTemplate>
   <LoggedInTemplate>
        <asp:Label runat="server" ID="WelcomeBackMessage"></asp:Label>
    </LoggedInTemplate>
   <RoleGroups>
       <asp:RoleGroup Roles="Admin">
           <ContentTemplate>
               <Admin:AdminPart ID ="adminContent" runat="server" />
           </ContentTemplate>
       </asp:RoleGroup>
       <asp:RoleGroup Roles="A">
           <ContentTemplate>
              <RoleA:RoleAPart ID = "RoleAContent" runat="server"/>
           </ContentTemplate>
       </asp:RoleGroup>
       <asp:RoleGroup Roles="B">
           <ContentTemplate>
             <RoleB:RoleBPart ID = "RoleBContent" runat="server" />
           </ContentTemplate>
       </asp:RoleGroup>
    </RoleGroups>
</asp:LoginView>
Run Code Online (Sandbox Code Playgroud)

RoleB:RoleBPart,RoleA:RoleAPart,Admin:AdminPart

是userControls!这是我的服务器..

protected void Page_Load(object sender, EventArgs e)
    {

    }
Run Code Online (Sandbox Code Playgroud)

我认为它比设置可见性更好,因为有时它很难处理它!当具有角色A的用户登录时,唯一显示的内容是RoleA:RoleAPart部分!


Han*_*nno 5

不应该太难:根据Panel中的角色(或任何其他可能适合您完成工作的元素)包装您要显示/隐藏的站点的部分.在你的代码后面的Page_Load(或Page_Init,不确定那个)做类似的事情

if (Roles.IsUserInRole("rolename")
{
    content.Visible = true;
}
else
{
    content.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)

其中content是您的aspx页面上Panel的ID.上面的代码也可以写成

content.Visible = Roles.IsUserInRole("rolename");
Run Code Online (Sandbox Code Playgroud)

另一种检查角色的方法是

User.IsInRole("rolename")
Run Code Online (Sandbox Code Playgroud)

这实际上是我喜欢使用的方法,因为它看起来更清洁.Roles.IsUserInRole方法也可用于检查特定用户是否具有某个角色,但在这种情况下我们对此不感兴趣.