• 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对应的用户实列。,再这里验证不通过,就不执行后面的内容。

  • 相关阅读:
    [算法练习]ZigZag Conversion
    获取所有后缀DDE打开命令
    [算法练习]Add Two Numbers
    获取dll编译时生成的pdb文件的名称
    [转载]定位 C++/CLI 库的加载失败异常
    在C++/CLI环境下,千万不要把普通全局函数当标准C/C++的函数指针传递给native的库使用
    Mono集成中使用api获取当前mono 调用堆栈的方法
    简单对比了一下MonoXml与SystemXml在Unity下的表现
    C++从LPEXCEPTION_POINTERS获取调用堆栈
    遇到doxygen生成的chm文档目录如果有中文是乱码?
  • 原文地址:https://www.cnblogs.com/muwu/p/9037012.html
Copyright © 2020-2023  润新知