zoukankan      html  css  js  c++  java
  • 牛腩购物网: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

  • 相关阅读:
    012.Nginx负载均衡
    011.Nginx防盗链
    010.Nginx正反代理
    009.Nginx缓存配置
    附007.Docker全系列大总结
    附024.Kubernetes全系列大总结
    008.Nginx静态资源
    007.Nginx虚拟主机
    006.Nginx访问控制
    005.Nginx配置下载站点
  • 原文地址:https://www.cnblogs.com/iceicebaby/p/2473530.html
Copyright © 2011-2022 走看看