我有一个 asp.net 站点..每个页面都有一些内容,每个登录用户都有一些角色..我想根据登录用户角色隐藏和显示页面的内容..我该怎么做? 谢谢。PS:我知道asp.net中的身份验证和授权表单......我的问题是关于页面的内容。
或者
我想知道拥有一些.ascx(用户控件)然后将它们添加到.aspx页面是否正确..然后基于可见性属性和用户角色隐藏和显示aspx页面的部分..这是最好的方法? 谢谢。
我有一个 asp.net 站点..每个页面都有一些内容,每个登录用户都有一些角色..我想根据登录用户角色隐藏和显示页面的内容..我该怎么做? 谢谢。PS:我知道asp.net中的身份验证和授权表单......我的问题是关于页面的内容。
或者
我想知道拥有一些.ascx(用户控件)然后将它们添加到.aspx页面是否正确..然后基于可见性属性和用户角色隐藏和显示aspx页面的部分..这是最好的方法? 谢谢。
我终于找到了合适的答案..我不想设置可见性属性(是的,这并不难猜!),因为它使我的代码变脏并且不方便...假设我有页面 Default.aspx 和那里是 3 个角色 Admin,A,B....在 Default.aspx 页面中我想根据用户角色显示内容,所以我使用 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>
RoleB:RoleBPart, RoleA:RoleAPart, Admin:AdminPart
是用户控件!这是我的服务器端..
protected void Page_Load(object sender, EventArgs e)
{
}
我认为这比设置可见性更好,因为有时很难处理它!当角色 A 的用户登录时,唯一显示的内容是 RoleA:RoleAPart 部分!
不应该太难:根据面板中的角色(或任何其他可能适合您完成工作的元素)包装您想要显示/隐藏的网站部分。在Page_Load(或Page_Init,不确定那个)后面的代码中执行类似的操作
if (Roles.IsUserInRole("rolename")
{
content.Visible = true;
}
else
{
content.Visible = false;
}
其中 content 是您的 aspx 页面上面板的 ID。上面的代码也可以写成
content.Visible = Roles.IsUserInRole("rolename");
检查角色的另一种方法是
User.IsInRole("rolename")
这实际上是我更喜欢使用的方法,因为它看起来稍微干净一些。Roles.IsUserInRole 方法也可用于检查特定用户是否具有特定角色,但在这种情况下我们对此不感兴趣。