用户的授权-Symfony5全面开发

您需要登录后才可观看此视频

为了更好的为您提供服务,请您登录后再查看本课程。

立即登录

我们来修改一下博客前端的页面,在顶部导航栏后面我们来添加一个用户信息。当用户登录之后,用户名会显示在这里。回到项目,我们修改模板文件,打开base.html.twig文件。顶部的导航区块,我们可以提取成一个单独的模板文件,在templates目录中我们新增一个文件,文件名叫nav.html.twig。我们把nav区块中的代码粘贴过来。再回到base.html.twig文件,我们使用include关键字将模板文件引入进来。

回到浏览器刷新,现在和之前显示的一样。回到项目,同样的方法我们来修改一下footer区块。在templates目录中新增一个footer.html.twig模板文件,粘贴footer中的代码。在base.html.twig文件中使用include引入footer模板文件。

我们来修改nav.html.twig文件,在菜单项最下方我们来添加代码。为了节省时间,我这里就直接粘贴了。在菜单后方我们增加了一个下拉按钮,首先它获取app变量的user对象,如果user对象存在的话,就会显示这按钮。

我们可以查看一下app变量,输入dump(app),回到浏览器,刷新。app变量是AppVariable类的一个实例。我们查看一下AppVariable类,我们查看一下类中的方法。AppVariable类中有很多get方法,我们可以通过get方法来获取当前的运行环境,获取所有的flash消息,获取当前的请求对象,Session对象,Token和User对象。

按钮中间是username,我们看到这里有个弃用提示,我们按着command键点击username,查看一下源码。这里说从5.3版本开始使用另一个方法进行替代,我们复制方法名。回到nav.html.twig文件,粘贴方法名称,删除get前缀,把第一个大写字母替换为小写,这样就可以了。然后下拉菜单中是退出链接。

我们往上看,菜单的首页地址和logo地址我们都进行了替换,logo的名称我们也进行了替换。回到浏览器刷新,我们来登录一下管理员账号。回到首页,在菜单后面显示了我们的用户名,点击用户名之后会显示退出链接。

我们来打开第一篇博客文章,我们希望只有登录过的用户才可以提交评论,回到代码,我们来修改一下详情页的模板。打开show.html.twig文件,我们往下拉,在form表单这里,我们可以添加一个条件判断。

if app.user,然后添加一个else,对用户进行一些提示,endif。您需要登录后才可以提交评论。在这里我们添加一个a标签,让它指向我们的登录链接。回到浏览器,我们退出当前的用户,再次访问第一篇文章,在文章后面就显示了登录的提醒。

回到项目,我们对User对象判断,来控制评论表单来显示,这样有些不够细粒度,将来我们的用户可能有更多的角色。有些角色可以发表评论,有些角色不允许发表评论。我们就需要使用另外一种方法来进行条件判断了。Symfony提供了一个Twig方法is_granted()

我们复制这行代码,注释,is_granted(),参数,我们可以输入用户的角色,这里我们输入ROLE_USER。我们查看一下User类,我们查看getRoles()方法。getRoles()方法中,所有注册的用户都会有ROLE_USER这个角色,所以在模板中我们可以判断用户的角色来决定是否显示评论表单。

#templates/post/show.html.twig

<!-- Comments Form -->
{# {% if app.user %} #}
{% if is_granted('ROLE_USER') %}
<div class="card my-4">
    <h5 class="card-header">Leave a Comment:</h5>
    <div class="card-body">
        {{ form_end(comment_form) }}
    </div>
</div>
{% else %}
    您需要<a href="{{ path('app_login') }}">登录</a>后,才可以提交评论。
{% endif %}

回到浏览器刷新,同样的登录提醒也进行了显示。在Twig模板中,我们可以使用is_granted()方法来进行权限的判断。我们还需要在后端对controller方法进行权限验证。在下节课我们来对controller方法进行权限验证。

课程讨论

当前内容评论功能已关闭。