牛腩购物网:LoginView控件的使用,AnonymousTemplate ,LoggedInTemplate ,RoleGroups 的使用

牛腩购物网的一个小bug清除:当后台 admin 角色,不注销 而去前台首页的时候,前台显示为登录但是 角色不对

 

image

image

但是实际上,前台是给  user 这个用户组用来注册和登陆的,那么在前台这里显示  后台的  admin 角色里面的用户名,显然是错的。这是为什么么?

因为,

LoginView 控件根据用户是否经过身份验证以及他(或她)属于哪个网站角色(如果用户经过身份验证),为不同的用户显示不同的网站内容模板(或者说“视图”)。

存储在 AnonymousTemplate属性中的模板向所有未在网站中登录的访问者显示。用户登录后,网站或者显示与 RoleGroups属性中该用户的某个角色相关联的模板,

或者显示 LoggedInTemplate属性中指定的默认模板。

 

1:匿名状态,是指用户还没有登陆的时候显示的状态,

                        <AnonymousTemplate>
                            <table width="100%" height="134" border="0">
                                <tr>
                                    <td height="48">&nbsp;</td>
                                </tr>
                                <tr>
                                    <td>用户:<asp:TextBox ID="txtName" runat="server"></asp:TextBox></td>
                                </tr>
                                <tr>
                                    <td>密码:<asp:TextBox ID="txtPwd" runat="server" TextMode="Password"></asp:TextBox>
                                    </td>
                                </tr>
                                <tr>
                                    <td align="center">
                                        <asp:LinkButton ID="lbtnLogin" runat="server" OnClick="lbtnLogin_Click">登录</asp:LinkButton>
<a  href="#"></a><a href="reg1.aspx">注册</a><a href="getpwd1.aspx" target="_blank">忘记密码
                                        </a></td>
                                </tr>
                            </table>
                        </AnonymousTemplate>

2:登陆后状态(这个时候,是指登陆后的状态,但是是不分角色的,也就是他不识别你是 user  还是 admin 角色,只是识别 你登陆了)

<LoggedInTemplate>
                            <br>
                            <br>
                            <br>
    欢迎您,<asp:LoginName ID="LoginName1" runat="server" /><asp:Literal ID="litIsVip" runat="server"></asp:Literal><asp:LoginStatus ID="LoginStatus1" runat="server" />
   </LoggedInTemplate>

 

我们刚才会错误的原因,也是因为用了这个LoggedInTemplate,所以导致只要是有登陆的,都会显示你的用户名,以及注销按钮。

3:那么,正确的做法是? 使用 RoleGroups属性中该用户的某个角色相关联的模板

<RoleGroups>
           <asp:RoleGroup Roles="user"><%-- 如果是用户角色,那么我们显示,欢迎您,用户名,是否是vip,以及注销按钮 --%>
                 <ContentTemplate>
                                欢迎您,<asp:LoginName ID="LoginName1" runat="server" />
                                <asp:Literal ID="litIsVip" runat="server"></asp:Literal><asp:LoginStatus ID="LoginStatus1" runat="server" />
                  </ContentTemplate>
            </asp:RoleGroup>
            <asp:RoleGroup Roles="admin"><%--如果是管理员角色,那么我们还是显示登陆的登陆框—%> 
                <ContentTemplate>
                        <table width="100%" height="134" border="0">
                                <tr><td height="48">&nbsp;</td></tr><tr><td>用户:
                                        <asp:TextBox ID="txtName" runat="server"></asp:TextBox></td></tr>
                                <tr><td>密码:<asp:TextBox ID="txtPwd" runat="server" TextMode="Password"></asp:TextBox></td>
                                </tr>
                                <tr> <td align="center">
                                        <asp:LinkButton ID="lbtnLogin" runat="server" OnClick="lbtnLogin_Click">
                  登录</asp:LinkButton><a   href="#"></a><a href="reg1.aspx">注册</a><a href="getpwd1.aspx" target="_blank">忘记密码
                                        </a></td>
                                </tr>
                            </table>
                   </ContentTemplate>
        </asp:RoleGroup>
 </RoleGroups>

 

4:在后台,如何判断用户是否登陆?  Page.User.Identity.IsAuthenticated      这个用户是什么角色?   Page.User.IsInRole("user")

            //在登陆的窗口这里,如果登陆后,显示是什么会员类型
            if (Page.User.Identity.IsAuthenticated)
            {
                Model.User u = new DAL.UserDAO().GetModel(Page.User.Identity.Name);
                if (u != null)
                {
                    if (Page.User.IsInRole("user"))  //如果用户属于 user 这个角色,我们就显示他的 会员级别
                    {
                        Literal litIsVip = LoginView1.FindControl("litIsVip") as Literal;
                        litIsVip.Text = u.type == "normal" ? "普通会员" : "VIP会员";
                    }

                }
            }
 

image

总结:

LoginView 控件根据用户是否经过身份验证以及他(或她)属于哪个网站角色(如果用户经过身份验证),为不同的用户显示不同的网站内容模板(或者说“视图”)。

存储在 AnonymousTemplate属性中的模板向所有未在网站中登录的访问者显示。

用户登录后,网站或者显示与 RoleGroups属性中该用户的某个角色相关联的模板,或者显示 LoggedInTemplate属性中指定的默认模板。

为LoginView类的以下三个模板属性中的任何一个属性分配了模板后,LoginView 控件将管理不同模板之间的切换:

 

●  AnonymousTemplate 指定向未登录到网站的用户显示的模板。登录用户永远看不到此模板。

●  LoggedInTemplate 指定向登录到网站,但不属于任何具有已定义模板的角色组的用户显示的默认模板。

●  RoleGroups 指定向已登录且是具有已定义角色组模板的角色的成员显示的模板。内容模板与 RoleGroup实例中的特定角色集相关联。

image

原文地址:https://www.cnblogs.com/iceicebaby/p/2473530.html