Created
October 19, 2017 06:19
-
-
Save rawaludin/3723fd5558258d89b80a8a61beea3c47 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sesi 3 BDV |
app/Post.php
public function author()
{
return $this->belongsTo(User::class, 'author_id');
}
resources/views/blogs/index.blade.php
<div class="panel-heading">
<a href="/posts/{{$post->id}}">{{$post->title}}</a>
ditulis oleh {{ $post->author->name }}
</div>
resources/views/layouts/app.blade.php:39
<li><a href="{{ route('posts.index') }}">Tulisan</a></li>
app/Http/Controllers/PostController.php
public function store(Request $request)
{
$post = new Post();
$post->title = $request->input('title');
$post->content = $request->input('content');
$post->author_id = $request->user()->id;
$post->save();
return redirect()->route('posts.index');
}
public function update(Request $request, Post $post)
{
$post->update($request->only('title', 'content'));
return redirect()->route('posts.index');
}
database/seeds/UsersTableSeeder.php
<?php
use Illuminate\Database\Seeder;
use App\User;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds
* @return void
*/
public function run()
{
factory(User::class)->create([
'name' => 'Admin Ganteng',
'email' => 'admin@gmail.com',
'password' => bcrypt('rahasia'),
'level' => User::LEVEL_ADMIN,
]);
factory(User::class)->create([
'name' => 'Member Kece',
'email' => 'kece@gmail.com',
'password' => bcrypt('rahasia'),
'level' => User::LEVEL_MEMBER,
]);
factory(User::class)->create([
'name' => 'Member Keren',
'email' => 'keren@gmail.com',
'password' => bcrypt('rahasia'),
'level' => User::LEVEL_MEMBER,
]);
}
}
app/User.php
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
const LEVEL_ADMIN = 1;
const LEVEL_MEMBER = 2;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'level'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
database/migrations/2014_10_12_000000_create_users_table.php
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->smallInteger('level');
$table->rememberToken();
$table->timestamps();
});
}
app/Http/Controllers/Auth/RegisterController.php
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'level' => User::LEVEL_MEMBER,
]);
}
app/User.php
public function isAdmin()
{
return $this->level == static::LEVEL_ADMIN;
}
public function isMember()
{
return $this->level == static::LEVEL_MEMBER;
}
app/Http/Controllers/PostController.php
public function index(Request $request)
{
if ($request->user()->isMember()) {
$posts = Post::where('author_id', $request->user()->id)->paginate(20);
}
if ($request->user()->isAdmin()) {
$posts = Post::paginate(20);
}
return view('posts.index', compact('posts'));
}
app/User.php
public function posts()
{
return $this->hasMany(Post::class, 'author_id');
}
app/Http/Controllers/PostController.php
public function index(Request $request)
{
if ($request->user()->isMember()) {
$posts = $request->user()->posts()->paginate(20);
}
if ($request->user()->isAdmin()) {
$posts = Post::paginate(20);
}
return view('posts.index', compact('posts'));
}
app/Providers/AuthServiceProvider.php
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
App\Post::class => App\Policies\PostPolicy::class
];
app/Policies/PostPolicy.php
public function update(User $user, Post $post)
{
return $post->author_id == $user->id;
}
app/Http/Controllers/PostController.php
public function edit(Post $post)
{
$this->authorize('update', $post);
return view('posts.edit', compact('post'));
}
resources/views/errors/403.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<p>
Maaf Anda tidak punya akses untuk halaman ini.
</p>
</div>
@endsection
app/Providers/AuthServiceProvider.php
use App\Post;
use App\Policies\PostPolicy;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
Post::class => PostPolicy::class
];
app/Policies/PostPolicy.php
public function update(User $user, Post $post)
{
if ($user->isAdmin()) {
return true;
}
return $post->author_id == $user->id;
}
app/Policies/PostPolicy.php
public function delete(User $user, Post $post)
{
if ($user->isAdmin()) {
return true;
}
return $post->author_id == $user->id;
}
app/Http/Controllers/PostController.php
public function destroy(Post $post)
{
$this->authorize('delete', $post);
$post->delete();
return redirect()->route('posts.index');
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
database/factories/Post.php