codecamp

Laravel 项目开发规范 授权策略

授权策略

授权相关逻辑,必须 使用 授权策略类 来实现。

使用基类

所有 Policy 授权策略类 必须 继承 app/Policies/Policy.php 基类。基类文件如下:

<?php

namespace App\Policies;

use Illuminate\Auth\Access\HandlesAuthorization;

class Policy
{
    use HandlesAuthorization;

    public function __construct()
    {
        //
    }

    public function before($user, $ability)
    {
        if ($user->isAdmin()) {
            return true;
        }
    }
}

授权策略命名

Policy 授权策略类 必须 遵循 资源路由 方式进行命名,photos 对应 /app/Policies/PhotoPolicy.php 。

类文件参考

Policy 授权策略类文件内容请参考以下:

<?php

namespace App\Policies;

use App\Models\User;
use App\Models\Photo;

class PhotoPolicy extends Policy
{
    public function update(User $user, Photo $photo)
    {
        return $user->isAuthorOf($photo);
    }

    public function destroy(User $user, Photo $photo)
    {
        return $user->isAuthorOf($photo);
    }
}

自动判断授权策略

应该 使用 自动发现授权策略方法,这样控制器和授权类的方法名就统一起来了。

/**
 * 更新指定的文章。
 *
 * @param  int  $id
 * @return Response
 */
public function update($id)
{
    $post = Post::findOrFail($id);

    // 会自动调用 `PostPolicy` 类中的 `update` 方法。
    $this->authorize($post);

    // 更新文章...
}


Laravel 项目开发规范 表单验证
Laravel 项目开发规范 数据填充
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }