zoukankan      html  css  js  c++  java
  • laravel 权限控制及验证

    之前已经写过了,如果对一些页面进行限制,只有登陆了才可以访问,使用的是Auth认证,其方法是把做好的中间件加再路由上,除了加再路由上,还可以放在控制器中。

    再控制器中创建构造方法:

    public function __construct()

    {

      $this->middleware( ' aurh' , [ ' except' => [ ' show ' ] ] )

    }

    except为除。。。之外,这里表示,除了show方法return的view页面之外,都会进行auth认证,没有登陆就进不去。

    现在来说用户权限,用户登陆了,url会有用户的id,当我想要编辑自己的信息时,我去更改url上的用户id,也可以去更改别人的信息,这里就要做一个权限认证,判断当前登陆用户,与要去操作的用户id是否相等,不等就报错。比如id为7的用户要登陆,我拿当前这个7去和当前登陆用户的id对比,一致既通过。

    具体方法:

    创建policy权限:php artisan make:policy  UserPolict  这个会在 app 目录下创建一个文件夹 Polices 文件夹存放,权限管理文件。

    创建好后去注册,打开 Providers 文件夹(服务提供者的意思) 打开 AuthServiceProvider.php 再 policies 属性中添加上User权限管理:

    AppUser::class => AppPoliciesUserPolicy::class,

    注册上了,就可以去编写权限规则了:

      需要对控制器中的哪个方法实现权限管理,就创建哪个方法

      public function store(User $currentUser , User $user)

      {

        return $currentUser->id === $user->id;
      }

     说明:我对控制器中的头像上传方法进行权限认证,判断你有没有权限更换头像,再这个里面创建一个store同样的方法,需要两个参数:

      第一个参数默认为当前登录用户实例,第二个参数则为要进行授权的用户实例

      第一个User $currentUser ,此处依赖注入,得到的是权限policy自带的功能,它会自己获取到当前登陆用户的实例

      第二个User $user ,此处依赖注入,为当前操作的用户,此处的用户是通过url传递过来的用户id参数进行模型查找实力化的user,也就是说:

      url传递过来的id是几,此时user模型实列的就是id对应的用户,这里通过url更改id,将这个id和登陆用户的id 对比 。

      即可返回一个布尔值,true为一样,false为不一样。

      接下来要再控制器中,进行权限验证,当url路由到控制器中的方法时,就开始验证,方法为:

      $this->authorize( ' store ' , $user );  此处传递两个参数,第一个为方法,表示验证哪个方法的权限,会到权限文件里面找那个对应的方法进行验证,

      第二个为当前授权的用户实力,也就是url传递过来id对应的用户实列。,再这里验证不通过,就不执行后面的内容。

  • 相关阅读:
    Redis使用初步
    Servlet Java Web开发(3.1) request response
    TcpClient例子(2)更robust的程序
    C#多线程之ManualResetEvent,Thread,ThreadPool,BackgroudWoker
    使用TcpClient的例程
    C#中多线程修改UI
    C# 多线程之异步回调
    Servlet Java Web开发(3) request response和编码
    Eclipse 和MyEclipse下Servlet Java Web开发(2)
    Eclipse 和MyEclipse下Servlet Java Web开发(1)
  • 原文地址:https://www.cnblogs.com/muwu/p/9037012.html
Copyright © 2011-2022 走看看