删除用户
提示
本节将为管理员增添删除功能,通过中间件鉴权来达到操作的目的。
#
添加管理员我们在之前的课程中,已经在数据库中创建了一个 god
字段,但是现在还未存在任何管理员,所以我们在上一节的 seed
中设置第一位用户为管理员:
database\seeds\Users.php
再次运行 php think seed:run
并刷新数据库,即可看到第一位用户已经被设置为管理员。
#
删除功能在删除功能之前,我们需要判断是否是管理员,在 8.4 权限系统 中已经设置过当前用户的策略,只需要再创建一个管理员策略即可。
创建文件:
application\behavior\GodPolicy.php
接着创建中间件,在控制台中键入命令:
shell
application\http\middleware\GodAuthorize.php
application\user\controller\Auth.php
通过综上操作,我们为 Auth
控制台中的 delete
创建了一个管理员权限校验的方法,接下来编写前端模板。
#
添加删除按钮编辑前端模板:
resources\views\user\auth\index.blade.php
刷新页面,则可以看到删除按钮,可是我们以任意用户来访问这个页面,都能出现删除按钮,所以要在添加一个管理员才能查看的功能,打开控制器:
application\user\controller\Auth.php
可以看到,我们在 8.4 花了很大功夫解耦权限判断现在起了作用,只需要执行 Hook
就能快速的判断是否通过此类操作,再也不用重复的书写一大堆判断条件,现在再来编写前端页面:
resources\views\user\auth\index.blade.php
这时候重新注册一个没有管理员权限的账号,访问 http://thinkphp.test/user/auth/index 就不会看到有任何的删除按钮了,下面来编写删除功能:
application\user\controller\Auth.php
请注意,我们在删除语句中添加了一句 where('god', false)
,这是因为管理员不能够删除自己。
刷新页面,点击删除按钮,却被提示 非法操作
,这是因为在 UserPolicy
的策略中,我们判断当前登入用户必须要和传入用户一致才能够进行下一步操作,现在来修改中间件。
application\http\middleware\UserAuthorize.php
上述代码中,当我们判断到当前登入用户是管理员时,即可直接返回下一步,即管理员拥有超级权限。
再刷新页面并点击删除按钮,现在如愿以偿的工作了。