Kwong Yan Chan

1458 经验值

显示到注册成功页面了 。 理论上已经发送邮件,邮箱没有收到,有没有排错思路?
错误已经找到。问题解决 。正常收取邮件了

well.终于过了 ,哎呀心累。

return出来的是0,!!后就是false ,权限是视频中所说的流程,但最后依然没见到编辑。 现在回滚。 数据库提示错误。处理中。。。。

刚才tinker插入数据时候提示约束限制 插入不了。我再翻看一次视频吧。 搞了两小时不出来 。 返回的都是0,权限没有交集, 但数据库是OK 的啊 。。。

public function boot(GateContract $gate)
    {
        $this->registerPolicies($gate);
        foreach( $this->getPermissions() as $permission ){
            dump( $permission );
            $gate->define( $permission->name,function( User $user ) use ($permission){
                dump( '222' );
                return $user->hasRole( $permission->roles() ) ;#找到用户有多少规则
            } );
        }


    }

我的版本是5.1.45
第一个dump是打印出来了 ,第二个dump('222') 完全没打印, 就是完全没进去? 闭包use适合5.1版本?

01:Laravel ACL 权限

  • 生成表:php artisan make:migration create_posts_table --create=posts

  • 创建字段

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->string('title');
        $table->text('body');
        $table->timestamps();
        $table->foreign('user_id')
              ->references('id')
              ->on('users')
              ->onDelete('cascade');

    });
}
  • 生成数据表php artisan migrate

  • 建立模型文件postsphp artisan make:model Post

  • 定义测试数据,并生成

$factory->define(App\Post::class, function (Faker\Generator $faker) {
    return [
        'user_id' => factory(\App\User::class)->create()->id,
        'title' => $faker->sentence,
        'body' => $faker->paragraph,
    ];
});
  • 生成控制器php artisan make:controller PostsController

  • show方法测试代码

public function show($id)
{
    $post = Post::findOrFail($id);

    return $post->title;
}
  • 注册路由Route::resource( 'posts','PostsController' );

  • 测试访问:OK

  • 找到Providers\AuthServiceProvider

  • 找到boot方法

public function boot(GateContract $gate)
{
    $this->registerPolicies($gate);

    ##判断这篇文章是否当前用户创建
    $gate->define( 'show-post',function( $user,$post ) {
        return $user->id == $post->user_id;
    });

}
  • 找到控制器show方法【跟视频的版本有出入,到此步出错,mark,我用的是:Laravel Framework version 5.1.45 (LTS)】,修改如下,修改后第一种方案后,效果同视频一致,第二种方案是正常的

use Illuminate\Contracts\Auth\Access\Gate as GateContract;//引用
class PostsController extends Controller
{
    protected $authCheck;//增加
    
    //增加
    public function __construct( GateContract $gate )
    {
        $this->authCheck = $gate;
    }
    
    public function show($id)
    {
        $post = Post::findOrFail($id);
        \Auth::loginUsingId(2);
        //$this->authorize( 'show-post',$post );#第二种方式
        if( !$this->authCheck->check( 'show-post',$post ) ) {
            abort( 403,'Sorry' );
        }

        return $post->title;
    }
  • 优化boot方法

public function boot(GateContract $gate)
{
    $this->registerPolicies($gate);

    ##判断这篇文章是否当前用户创建
    $gate->define( 'show-post',function( $user,$post ) {
        return $user->owns( $post );
    });

}
  • user模型增加owns方法

public function owns($post)
{
    return $this->id == $post->user_id;
}
  • 测试效果:ok

  • 使用@can @endcan 标签 进行权限控制

    • 视频中说是5.1之后增加了此标签

    • 我这个版本是5.1.45;可以使用此标签,

    • Ps:开始以为是 5.2才会有此标签,嗯,效果就如视频中一样

嗯 昨晚已经搞定了 ,谢谢哈 。

OK搞定了 vue第一次结束。 一个系列下来,感谢你Jelly兄!!至少以前看过5.2,不过忘记了 。 现在打算撸的是稳定版5.1,有你这些视频,帮助很大

好了最后一节这里我引入的版本,跟改过的代码:

  • vue.js:官网下的2.1版本

  • vue-resource:github里下的1.0.3版本

  • 头像处使用绑定:

<img v-bind:src="comment.avatar" alt="64x64" style="width:64px;height:64px;" class="meida-object img-circle">
  • js中回调函数方法改成:

this.$http.post( '/comment',post).then(function(){
      this.comments.push( comment );
} );
  • PS:那么show页面其他代码基本不变,实现了视频中的实时评论
    哈哈,看完这个。可以用 5.1来重构一下自己的blog了。刚好是想用markdown编辑器 。

这里头像没有获取到 出现,报错了

<a href="">
                                <img src="@{comment.avatar}" alt="64x64" style="width:64px;height:64px;" class="meida-object img-circle">
                            </a>
%7B%7B%20comment.avatar%20%7D%7D:1 GET http://localhost:8999/discussions/%7B%7B%20comment.avatar%20%7D%7D 404 (Not Found)