Seputar Pemrograman

Cara Menggunakan package sentry di framework laravel bagian CRUD Group

  16 Oktober 2014     Tutorial Framework Laravel     seputarpemrograman

Setelah sebelumnya seputar pemrograman mebahas cara install sentry dan membuat pendaftaran user sederhana menggunakan package sentry. Ditutorial kali ini kita akan membahas groups pada sentry. Groups sentry digunakan untuk manajemen user per group, contohnya group admin, group moderator, group member dan bisa kita tambah atau kurangi sesuai kebutuhan aplikasi kita. Disini kita akan membahas bagaimana cara kerja create ( membuat ) group dengan beberapa permission, update ( ubah ) group dan delete ( hapus ) group.

Catatan : Groups Permissions, 0 = deny & 1 = allow.

Tanpa basa basi langsung kita praktekan membuat group dengan sentry. Pertama buatlah file bernama GroupController.php letakkan dalam folder app/controllers. Dan isi dengan code dibawah ini.

< ?php
class GroupController extends \BaseController {

}
// agar program berjalan lancar hapus spasi setelah tanda < 

Jika selesai sekarang buatlah sebuah folder bernama sentry didalam folder app/views. Lalu buat folder lagi didalam folder sentry yang baru dibuat dengan nama group. Didalam folder group ini buatlah beberapa file bernama index.blade.php , create.blade.php dan edit.blade.php. Setelah selesai membuat file – file ini buka file index.blade.php dan isikan code dibawah ini.

@extends('layouts.master')
@section('content')
< div class="row">
    < div class="col-lg-12">
        < h1 class="page-header">
            Halaman 
            < small>Daftar Group< /small>
        < /h1>
        @if (Session::has('message'))
            {{ Session::get('message') }}
        @endif
        < p>< a href="{{ URL::to('group/create') }}" class="btn btn-primary" role="button">Tambah Group Baru< /a>< /p>
        < div class="table-responsive">
                            < table class="table table-bordered table-hover">
                                < thead>
                                    < tr>
                                        < th width="10">ID< /th>
                                        < th>Group< /th>
                                        < th width="146">Aksi< /th>
                                    < /tr>
                                < /thead>
                                < tbody>
                                @foreach($group as $value)
                                    < tr>
                                        < td>{{{ $value->id }}}< /td>
                                        < td>{{{ $value->name }}}< /td>
                                        < td>
                                            {{ Form::open(array('url' => 'group/' . $value->id)) }}
                                            < div class="btn-group">
                                            < a href="{{ URL::to('group/' . $value->id . '/edit') }}" class="btn btn-primary">Ubah< /a>
                                            {{ Form::hidden('_method', 'DELETE') }}
                                            {{Form::button('Hapus', array('type' => 'submit', 'class' => 'btn btn-primary'))}}
                                            < /div>
                                            {{ Form::close() }}
                                        < /td>
                                    < /tr>
                                @endforeach    
                                < /tbody>
                            < /table>
            < /div>
            {{$group->links()}}

    < /div>
< /div>
@stop

// agar program berjalan lancar hapus spasi setelah tanda < 

Jangan lupa disimpan terlebih dahulu, lalu buka file GroupController.php dan didalam class GroupController sisipkan code dibawah ini.

public function index()
{
	$group = Group::paginate(5);
	$group = 
	[
	    'group' => $group
    ];
    return View::make('sentry.group.index', $group);
}

Hasilnya seperti ini.

< ?php

class GroupController extends \BaseController {

public function index()
{
	$group = Group::paginate(5);
	$group = 
	[
	    'group' => $group
    ];
    return View::make('sentry.group.index', $group);
}
}

// agar program berjalan lancar hapus spasi setelah tanda < 

Buka file routes.php didalam folder app dan tambahkan code ini.

Route::resource('group', 'GroupController');

Sampai sini list atau daftar group telah selesai anda bisa mencoba dengan mengakses url seperti ini.

http://localhost/projectlaravel/public/group

Jika sudah ada isinya didalam database makan kurang lebih hasilnya seperti gambar dibawah ini.

sentry group

Kita lanjutkan dengan membuat create (tambah) group, buka kembali controller GroupController.php dan tambah kan code dibawah ini persis dibawah function index.

public function create()
{
	return View::make('sentry.group.create');
}

public function store()
{
	
	$rules = array(
		'group' => 'required',
	);

	$validator = Validator::make(Input::all(), $rules);

	if ($validator->fails()) {	
		return Redirect::to('group/create')->withErrors($validator)->withInput();
	} else {			
		
		try
		{
		    $group = Sentry::createGroup(array(
		        'name'        => Input::get('group'),
		        'permissions' => Input::get('cb'),
		    ));
		}
		catch (Cartalyst\Sentry\Groups\NameRequiredException $e)
		{
		    Session::flash('message', 'Name field is required');
			return Redirect::to('group');
		}
		catch (Cartalyst\Sentry\Groups\GroupExistsException $e)
		{
		    Session::flash('message', 'Group already exists');
			return Redirect::to('group');
		}

   	Session::flash('message', 'Data Berhasil Ditambahkan');
	return Redirect::to('group');
	}
}

Lalu buka file create.blade.php didalam folder group yang telah dibuat tadi dan isikan code dibawah ini.

@extends('layouts.master')
@section('content')
< div class="row">
    < div class="col-lg-12">
        < h1 class="page-header">
            Halaman 
            < small>Tambah Group< /small>
        < /h1>

       {{ Form::open(array('url' => 'group')) }} 
            
            < div class="form-group">
            	{{ Form::label('group', 'Group') }}
		    	{{ Form::text('group', null, array('class' => 'form-control','placeholder'=>'masukkan group')) }}
                {{ '< div>'.$errors->first('group').'< /div>' }}
            < /div>
            
            < div class="form-group">
                {{ Form::label('user', 'User') }} : 
                < label class="checkbox-inline">
                {{Form::checkbox('cb[user.read]', '1')}} Read
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[user.create]', '1')}} Create
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[user.update]', '1')}} Update
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[user.destroy]', '1')}} Destroy
                < /label>
            < /div>
            < div class="form-group">
                {{ Form::label('crud', 'CRUD Query Builder') }} : 
                < label class="checkbox-inline">
                {{Form::checkbox('cb[cqb.read]', '1')}} Read
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[cqb.create]', '1')}} Create
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[cqb.update]', '1')}} Update
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[cqb.destroy]', '1')}} Destroy
                < /label>
            
            < /div>
            < div class="form-group">
                {{ Form::label('crud', 'CRUD Eloquent ORM') }} : 
                < label class="checkbox-inline">
                {{Form::checkbox('cb[ceo.read]', '1')}} Read
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[ceo.create]', '1')}} Create
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[ceo.update]', '1')}} Update
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[ceo.destroy]', '1')}} Destroy
                < /label>
            < /div>
            {{ Form::submit('SIMPAN', array('class' => 'form-control')) }}

        {{ Form::close() }}

    < /div>
< /div>
@stop

// agar program berjalan lancar hapus spasi setelah tanda < 

Untuk menjalankannya anda bisa klik tombol tambah group ataupun mengakses dengan url seperti ini.

http://localhost/projectlaravel/public/group/create

Berikut ini gambar dari form create group sentry.

create group sentry

Catatan : untuk checkbox permodul memang masih saya buat secara manual, jadi bisa anda kembangkan misal membuat tabel lagi modul dan aksi. Tapi ini sudah lebih dari cukup dimanis karena kita bisa mengatur permodul dan fungsinya.

Selanjutnya adalah membuat update (ubah) group, buka kembali controller GroupController.php dan tambahkan code dibawah ini tepat dibawah function store.

public function edit($id)
{
	$groupbyid = Group::findOrFail($id);
	$groupbyid = 
	[
	    'groupbyid' => $groupbyid
    ];
    return View::make('sentry.group.edit', $groupbyid);
}

public function update($id)
{
	$rules = array(
		'group' => 'required',
	);

	$validator = Validator::make(Input::all(), $rules);

	if ($validator->fails()) {	
		return Redirect::to('group/'.$id.'/edit')->withErrors($validator)->withInput();
	} else {
		
		try
		{
	    $group = Sentry::findGroupById($id);
	    $arrexs = array(); 
		foreach ($group->permissions as $key => $value) {
			if (array_key_exists($key, Input::get('cb'))) {
				    $arrexs[$key] = '1';
			}
		}
		$arrexs2 = array(); 
		foreach ($group->permissions as $key => $value) {
			if (!array_key_exists($key, $arrexs)) {
				    $arrexs2[$key] = '0';
			}
		}
		$arrexs3 = array_merge($arrexs2,Input::get('cb'));
	    $group->name = Input::get('group');
	    $group->permissions = $arrexs3;
	    $group->permissions = array();

     	if ($group->save())
	    {
	        Session::flash('message', 'Data Berhasil Diubah');
			return Redirect::to('group');	
	    }
	    else
	    {
	        Session::flash('message', 'Data Gagal Diubah');
	        return Redirect::to('group');
	    }
		}
		catch (Cartalyst\Sentry\Groups\NameRequiredException $e)
		{
		    Session::flash('message', 'Name field is required');
			return Redirect::to('group');
		}
		catch (Cartalyst\Sentry\Groups\GroupExistsException $e)
		{
		    Session::flash('message', 'Group already exists');
			return Redirect::to('group');
		}
		catch (Cartalyst\Sentry\Groups\GroupNotFoundException $e)
		{
		    Session::flash('message', 'Group was not found.');
			return Redirect::to('group');
		}
	}
}

Sekarang buka file edit.blade.php lalu isikan code seperti dibawah ini.

@extends('layouts.master')
@section('content')
< div class="row">
    < div class="col-lg-12">
        < h1 class="page-header">
            Halaman 
            < small>Ubah Group< /small>
        < /h1>
        {{--*/ $perm = json_decode($groupbyid->permissions, true) /*--}}

        {{ Form::model($groupbyid, array('route' => array('group.update', $groupbyid->id),'method' => 'PUT')) }}
            
            < div class="form-group">
                {{ Form::label('group', 'Group') }}
                {{ Form::text('group', $groupbyid->name, array('class' => 'form-control','placeholder'=>'masukkan group')) }}
                {{ '< div>'.$errors->first('group').'< /div>' }}
            < /div>

            < div class="form-group">
                {{ Form::label('user', 'User') }} : 
                < label class="checkbox-inline">
                {{Form::checkbox('cb[user.read]', '1', (!empty($perm['user.read']) == 1 ? true : false))}} Read
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[user.create]', '1', (!empty($perm['user.create']) == 1 ? true : false))}} Create
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[user.update]', '1', (!empty($perm['user.update']) == 1 ? true : false))}} Update
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[user.destroy]', '1', (!empty($perm['user.destroy']) == 1 ? true : false))}} Destroy
                < /label>
            < /div>
            < div class="form-group">
                {{ Form::label('crud', 'CRUD Query Builder') }} : 
                < label class="checkbox-inline">
                {{Form::checkbox('cb[cqb.read]', '1', (!empty($perm['cqb.read']) == 1 ? true : false))}} Read
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[cqb.create]', '1', (!empty($perm['cqb.create']) == 1 ? true : false))}} Create
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[cqb.update]', '1', (!empty($perm['cqb.update']) == 1 ? true : false))}} Update
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[cqb.destroy]', '1', (!empty($perm['cqb.destroy']) == 1 ? true : false))}} Destroy
                < /label>
            
            < /div>
            < div class="form-group">
                {{ Form::label('crud', 'CRUD Eloquent ORM') }} : 
                < label class="checkbox-inline">
                {{Form::checkbox('cb[ceo.read]', '1', (!empty($perm['ceo.read']) == 1 ? true : false))}} Read
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[ceo.create]', '1', (!empty($perm['ceo.create']) == 1 ? true : false))}} Create
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[ceo.update]', '1', (!empty($perm['ceo.update']) == 1 ? true : false))}} Update
                < /label>
                < label class="checkbox-inline">
                {{Form::checkbox('cb[ceo.destroy]', '1', (!empty($perm['ceo.destroy']) == 1 ? true : false))}} Destroy
                < /label>
            < /div>
            
            {{ Form::submit('SIMPAN', array('class' => 'form-control')) }}

        {{ Form::close() }}

    < /div>
< /div>
@stop

// agar program berjalan lancar hapus spasi setelah tanda < 

Silahkan disimpan terlebih dahulu lalu untuk menjalankan bisa klik tombol ubah, maka hasilnya akan nampak seperti gambar ini.

update group sentry

Yang terakhir adalah code untuk hapus group, silahkan dibuka file GroupController.php dan tambahkan code dibawah ini dibawah function update.

public function destroy($id)
{
	try
	{
	    $group = Sentry::findGroupById($id);
	    $group->delete();
	}
	catch (Cartalyst\Sentry\Groups\GroupNotFoundException $e)
	{
	    echo 'Group was not found.';
	}

	Session::flash('message', 'Data Berhasil Dihapus');
	return Redirect::to('group');
}

Selesai jika anda coba klik atau menekan tombol hapus maka data group otomatis terhapus.

Untuk keterangan memang tidak semua saya jelaskan jadi kalau ada pertanyaan silahkan tuliskan dikomentar dibawah ini, dan juga jangan lupa di share agar lebih bermanfaat lagi bagi yang lainnya.

 


comments powered by Disqus

CARI

KATEGORI PEMROGRAMAN

PEMROGRAMAN Terpopuler

PEMROGRAMAN ACAK