29 changed files with 147 additions and 574 deletions
-
2app/Entities/Projects/Project.php
-
18app/Entities/Users/Role.php
-
5app/Entities/Users/UsersRepository.php
-
66app/Http/Controllers/Users/PermissionsController.php
-
2app/Http/Controllers/Users/ProfileController.php
-
74app/Http/Controllers/Users/RolesController.php
-
16app/Http/Controllers/Users/UsersController.php
-
1app/Http/Kernel.php
-
33app/Http/Middleware/RoleMiddleware.php
-
1app/Http/Requests/Users/CreateRequest.php
-
32app/Http/Requests/Users/Roles/CreateRequest.php
-
31app/Http/Requests/Users/Roles/DeleteRequest.php
-
32app/Http/Requests/Users/Roles/UpdateRequest.php
-
1app/Providers/AuthServiceProvider.php
-
3database/factories/ModelFactory.php
-
33database/migrations/2015_08_12_205415_create_roles_permissions_table.php
-
31database/migrations/2016_03_04_020423_create_user_role_permission_table.php
-
31database/migrations/2016_03_05_083739_create_role_user_table.php
-
43resources/lang/id/auth.php
-
40resources/views/auth/profile.blade.php
-
3resources/views/layouts/partials/sidebar.blade.php
-
9resources/views/pages/home.blade.php
-
1resources/views/users/create.blade.php
-
8resources/views/users/edit.blade.php
-
31resources/views/users/profile/show.blade.php
-
2routes/web.php
-
5routes/web/users.php
-
11tests/Feature/Users/ManageUsersTest.php
-
6tests/Unit/Models/InvoiceTest.php
@ -1,18 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
namespace App\Entities\Users; |
|
||||
|
|
||||
use Illuminate\Database\Eloquent\Model; |
|
||||
|
|
||||
class Role extends Model |
|
||||
{ |
|
||||
protected $table = 'roles_permissions'; |
|
||||
|
|
||||
protected $fillable = ['type','name','label']; |
|
||||
public $timestamps = false; |
|
||||
|
|
||||
public function users() |
|
||||
{ |
|
||||
return $this->belongsToMany(User::class, 'role_user'); |
|
||||
} |
|
||||
} |
|
||||
@ -1,66 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
namespace App\Http\Controllers\Users; |
|
||||
|
|
||||
use App\Entities\Users\Permission; |
|
||||
use App\Http\Controllers\Controller; |
|
||||
use App\Http\Requests\Users\Permissions\CreateRequest; |
|
||||
use App\Http\Requests\Users\Permissions\DeleteRequest; |
|
||||
use App\Http\Requests\Users\Permissions\UpdateRequest; |
|
||||
use Illuminate\Http\Request; |
|
||||
|
|
||||
class PermissionsController extends Controller { |
|
||||
|
|
||||
public function index(Request $req) |
|
||||
{ |
|
||||
$permission = null; |
|
||||
if ($req->has('act') && in_array($req->get('act'), ['show','edit','del'])) { |
|
||||
$permission = $this->requireById($req->get('id')); |
|
||||
} |
|
||||
|
|
||||
$permissions = Permission::whereType(1)->withCount('roles')->get(); |
|
||||
return view('users.permissions',compact('permissions','permission')); |
|
||||
} |
|
||||
|
|
||||
public function store(CreateRequest $req) |
|
||||
{ |
|
||||
$permissionData = $req->except('_token'); |
|
||||
$permissionData['type'] = 1; // Permission Type
|
|
||||
$permission = Permission::create($permissionData); |
|
||||
flash()->success(trans('permission.created')); |
|
||||
return redirect()->route('permissions.index'); |
|
||||
} |
|
||||
|
|
||||
public function update(UpdateRequest $req, $permissionId) |
|
||||
{ |
|
||||
$permission = $this->requireById($permissionId); |
|
||||
$permission->update($req->except(['_method','_token'])); |
|
||||
flash()->success(trans('permission.updated')); |
|
||||
return redirect()->back(); |
|
||||
} |
|
||||
|
|
||||
public function delete($permissionId) |
|
||||
{ |
|
||||
$permission = $this->requireById($permissionId); |
|
||||
return view('permissions.delete', compact('permission')); |
|
||||
} |
|
||||
|
|
||||
public function destroy(DeleteRequest $req, $permissionId) |
|
||||
{ |
|
||||
if ($permissionId == $req->get('permission_id')) |
|
||||
{ |
|
||||
$this->requireById($permissionId)->delete(); |
|
||||
flash()->success(trans('permission.deleted')); |
|
||||
} |
|
||||
else |
|
||||
flash()->error(trans('permission.undeleted')); |
|
||||
|
|
||||
return redirect()->route('permissions.index'); |
|
||||
} |
|
||||
|
|
||||
private function requireById($permissionId) |
|
||||
{ |
|
||||
return Permission::findOrFail($permissionId); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
@ -1,74 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
namespace App\Http\Controllers\Users; |
|
||||
|
|
||||
use App\Entities\Users\Role; |
|
||||
use App\Http\Controllers\Controller; |
|
||||
use App\Http\Requests\Users\Roles\CreateRequest; |
|
||||
use App\Http\Requests\Users\Roles\DeleteRequest; |
|
||||
use App\Http\Requests\Users\Roles\UpdateRequest; |
|
||||
use Illuminate\Http\Request; |
|
||||
|
|
||||
class RolesController extends Controller { |
|
||||
|
|
||||
public function index(Request $req) |
|
||||
{ |
|
||||
// $role = null;
|
|
||||
if ($req->has('act') && in_array($req->get('act'), ['show','edit','del'])) { |
|
||||
$role = $this->requireById($req->get('id')); |
|
||||
} |
|
||||
|
|
||||
$roles = Role::whereType(0)->get(); |
|
||||
return view('users.roles',compact('roles','role','permissions')); |
|
||||
} |
|
||||
|
|
||||
public function store(CreateRequest $req) |
|
||||
{ |
|
||||
$roleData = $req->except('_token'); |
|
||||
$roleData['type'] = 0; // Role Type
|
|
||||
$role = Role::create($roleData); |
|
||||
flash()->success(trans('role.created')); |
|
||||
return redirect()->route('roles.index'); |
|
||||
} |
|
||||
|
|
||||
public function update(UpdateRequest $req, $roleId) |
|
||||
{ |
|
||||
$role = $this->requireById($roleId); |
|
||||
$role->update($req->except(['_method','_token'])); |
|
||||
flash()->success(trans('role.updated')); |
|
||||
return redirect()->back(); |
|
||||
} |
|
||||
|
|
||||
public function destroy(DeleteRequest $req, $roleId) |
|
||||
{ |
|
||||
if ($roleId == $req->get('role_id')) |
|
||||
{ |
|
||||
$role = $this->requireById($roleId); |
|
||||
$role->permissions()->detach(); |
|
||||
$role->delete(); |
|
||||
|
|
||||
flash()->success(trans('role.deleted')); |
|
||||
} |
|
||||
else |
|
||||
flash()->error(trans('role.undeleted')); |
|
||||
|
|
||||
return redirect()->route('roles.index'); |
|
||||
} |
|
||||
|
|
||||
public function updatePermissions(Request $req, $roleId) |
|
||||
{ |
|
||||
$role = $this->requireById($roleId); |
|
||||
if ($req->has('permission')) |
|
||||
$role->permissions()->sync($req->get('permission')); |
|
||||
else |
|
||||
$role->permissions()->detach(); |
|
||||
|
|
||||
flash()->success(trans('role.updated')); |
|
||||
return redirect()->back(); |
|
||||
} |
|
||||
|
|
||||
private function requireById($roleId) |
|
||||
{ |
|
||||
return Role::findOrFail($roleId); |
|
||||
} |
|
||||
} |
|
||||
@ -1,33 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
namespace App\Http\Middleware; |
|
||||
|
|
||||
use Closure; |
|
||||
|
|
||||
class RoleMiddleware |
|
||||
{ |
|
||||
/** |
|
||||
* Handle an incoming request. |
|
||||
* |
|
||||
* @param \Illuminate\Http\Request $request |
|
||||
* @param \Closure $next |
|
||||
* @return mixed |
|
||||
*/ |
|
||||
public function handle($request, Closure $next, $names) |
|
||||
{ |
|
||||
$nameArray = explode('|', $names); |
|
||||
|
|
||||
if (auth()->check() == false) { |
|
||||
return redirect()->guest('login'); |
|
||||
} |
|
||||
|
|
||||
// Cek apakah grup user ada di dalam array $nameArray?
|
|
||||
if (auth()->user()->hasRoles($nameArray) == false) |
|
||||
{ |
|
||||
flash()->error('Anda tidak dapat mengakses halaman ' . $request->path() . '.'); |
|
||||
return redirect()->route('home'); |
|
||||
} |
|
||||
|
|
||||
return $next($request); |
|
||||
} |
|
||||
} |
|
||||
@ -1,32 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
namespace App\Http\Requests\Users\Roles; |
|
||||
|
|
||||
use App\Http\Requests\Request; |
|
||||
|
|
||||
class CreateRequest extends Request { |
|
||||
|
|
||||
/** |
|
||||
* Determine if the user is authorized to make this request. |
|
||||
* |
|
||||
* @return bool |
|
||||
*/ |
|
||||
public function authorize() |
|
||||
{ |
|
||||
return auth()->user()->can('manage_role_permissions'); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* Get the validation rules that apply to the request. |
|
||||
* |
|
||||
* @return array |
|
||||
*/ |
|
||||
public function rules() |
|
||||
{ |
|
||||
return [ |
|
||||
'name' => 'required|max:60|unique:roles_permissions,name', |
|
||||
'label' => 'required|max:60', |
|
||||
]; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
@ -1,31 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
namespace App\Http\Requests\Users\Roles; |
|
||||
|
|
||||
use App\Http\Requests\Request; |
|
||||
|
|
||||
class DeleteRequest extends Request { |
|
||||
|
|
||||
/** |
|
||||
* Determine if the user is authorized to make this request. |
|
||||
* |
|
||||
* @return bool |
|
||||
*/ |
|
||||
public function authorize() |
|
||||
{ |
|
||||
return auth()->user()->can('manage_role_permissions'); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* Get the validation rules that apply to the request. |
|
||||
* |
|
||||
* @return array |
|
||||
*/ |
|
||||
public function rules() |
|
||||
{ |
|
||||
return [ |
|
||||
'role_id' => 'required' |
|
||||
]; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
@ -1,32 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
namespace App\Http\Requests\Users\Roles; |
|
||||
|
|
||||
use App\Http\Requests\Request; |
|
||||
|
|
||||
class UpdateRequest extends Request { |
|
||||
|
|
||||
/** |
|
||||
* Determine if the user is authorized to make this request. |
|
||||
* |
|
||||
* @return bool |
|
||||
*/ |
|
||||
public function authorize() |
|
||||
{ |
|
||||
return auth()->user()->can('manage_role_permissions'); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* Get the validation rules that apply to the request. |
|
||||
* |
|
||||
* @return array |
|
||||
*/ |
|
||||
public function rules() |
|
||||
{ |
|
||||
return [ |
|
||||
'name' => 'required|max:60|unique:roles_permissions,name,' . $this->segment(2), |
|
||||
'label' => 'required|max:60', |
|
||||
]; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
@ -1,33 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
use Illuminate\Database\Schema\Blueprint; |
|
||||
use Illuminate\Database\Migrations\Migration; |
|
||||
|
|
||||
class CreateRolesPermissionsTable extends Migration |
|
||||
{ |
|
||||
/** |
|
||||
* Run the migrations. |
|
||||
* |
|
||||
* @return void |
|
||||
*/ |
|
||||
public function up() |
|
||||
{ |
|
||||
Schema::create('roles_permissions', function (Blueprint $table) |
|
||||
{ |
|
||||
$table->increments('id'); |
|
||||
$table->boolean('type')->unsigned()->index()->default(1); |
|
||||
$table->string('name', 60); |
|
||||
$table->string('label', 60); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* Reverse the migrations. |
|
||||
* |
|
||||
* @return void |
|
||||
*/ |
|
||||
public function down() |
|
||||
{ |
|
||||
Schema::drop('roles_permissions'); |
|
||||
} |
|
||||
} |
|
||||
@ -1,31 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
use Illuminate\Database\Schema\Blueprint; |
|
||||
use Illuminate\Database\Migrations\Migration; |
|
||||
|
|
||||
class CreateUserRolePermissionTable extends Migration |
|
||||
{ |
|
||||
/** |
|
||||
* Run the migrations. |
|
||||
* |
|
||||
* @return void |
|
||||
*/ |
|
||||
public function up() |
|
||||
{ |
|
||||
Schema::create('user_role_permission', function (Blueprint $table) |
|
||||
{ |
|
||||
$table->unsignedInteger('role_id'); |
|
||||
$table->unsignedInteger('permission_id'); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* Reverse the migrations. |
|
||||
* |
|
||||
* @return void |
|
||||
*/ |
|
||||
public function down() |
|
||||
{ |
|
||||
Schema::drop('user_role_permission'); |
|
||||
} |
|
||||
} |
|
||||
@ -1,31 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
use Illuminate\Database\Schema\Blueprint; |
|
||||
use Illuminate\Database\Migrations\Migration; |
|
||||
|
|
||||
class CreateRoleUserTable extends Migration |
|
||||
{ |
|
||||
/** |
|
||||
* Run the migrations. |
|
||||
* |
|
||||
* @return void |
|
||||
*/ |
|
||||
public function up() |
|
||||
{ |
|
||||
Schema::create('role_user', function (Blueprint $table) |
|
||||
{ |
|
||||
$table->unsignedInteger('user_id')->index(); |
|
||||
$table->unsignedInteger('role_id')->index(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* Reverse the migrations. |
|
||||
* |
|
||||
* @return void |
|
||||
*/ |
|
||||
public function down() |
|
||||
{ |
|
||||
Schema::drop('role_user'); |
|
||||
} |
|
||||
} |
|
||||
@ -1,39 +1,38 @@ |
|||||
<?php |
<?php |
||||
|
|
||||
return [ |
return [ |
||||
|
// Profile
|
||||
|
'profile' => 'Profil Saya', |
||||
|
'profile_edit' => 'Edit Profil Saya', |
||||
|
'update_profile' => 'Update Profil', |
||||
|
'profile_updated' => 'Profil sudah diupdate.', |
||||
|
|
||||
/* |
|
||||
|-------------------------------------------------------------------------- |
|
||||
| Baris-baris bahasa untuk autentifikasi |
|
||||
|-------------------------------------------------------------------------- |
|
||||
| |
|
||||
| Baris bahasa berikut digunakan selama proses autentifikasi untuk beberapa |
|
||||
| pesan yang perlu kita tampilkan ke pengguna. Anda bebas untuk memodifikasi |
|
||||
| baris bahasa sesuai dengan keperluan aplikasi anda. |
|
||||
| |
|
||||
*/ |
|
||||
|
// Registration
|
||||
|
'register' => 'Buat Akun Baru', |
||||
|
'need_account' => 'Belum punya Akun?', |
||||
|
'have_an_account' => 'Saya sudah punya Akun', |
||||
|
|
||||
|
// Login & Logout
|
||||
|
'login' => 'Login', |
||||
|
'welcome' => 'Selamat datang kembali :name.', |
||||
'failed' => 'Identitas tersebut tidak cocok dengan data kami.', |
'failed' => 'Identitas tersebut tidak cocok dengan data kami.', |
||||
'throttle' => 'Terlalu banyak usaha masuk. Silahkan coba lagi dalam :seconds detik.', |
'throttle' => 'Terlalu banyak usaha masuk. Silahkan coba lagi dalam :seconds detik.', |
||||
'email' => 'Email', |
|
||||
'password' => 'Password', |
|
||||
'login' => 'Login', |
|
||||
'logout' => 'Keluar', |
'logout' => 'Keluar', |
||||
'register' => 'Buat Akun Baru', |
|
||||
'have_an_account' => 'Saya sudah punya Akun', |
|
||||
'need_account' => 'Belum punya Akun?', |
|
||||
|
'logged_out' => 'Anda telah logout.', |
||||
|
|
||||
|
// Password
|
||||
'change_password' => 'Ganti Password', |
'change_password' => 'Ganti Password', |
||||
'password_changed' => 'Password berhasil diubah.', |
'password_changed' => 'Password berhasil diubah.', |
||||
'forgot_password' => 'Lupa Password?', |
'forgot_password' => 'Lupa Password?', |
||||
'reset_password' => 'Reset Password', |
'reset_password' => 'Reset Password', |
||||
|
'send_reset_password_link' => 'Kirim Link Reset Password', |
||||
|
'old_password_failed' => 'Password lama tidak cocok!', |
||||
|
|
||||
|
// Attributes
|
||||
|
'email' => 'Email', |
||||
|
'password' => 'Password', |
||||
'password_confirmation' => 'Ulangi Password', |
'password_confirmation' => 'Ulangi Password', |
||||
'old_password' => 'Password Lama', |
'old_password' => 'Password Lama', |
||||
'new_password' => 'Password Baru', |
'new_password' => 'Password Baru', |
||||
'new_password_confirmation' => 'Ulangi Password Baru', |
'new_password_confirmation' => 'Ulangi Password Baru', |
||||
'send_reset_password_link' => 'Kirim Link Reset Password', |
|
||||
'old_password_failed' => 'Password lama tidak cocok!', |
|
||||
'welcome' => 'Selamat datang kembali :name.', |
|
||||
'logged_out' => 'Anda telah logout.', |
|
||||
'profile' => 'Profil Saya', |
|
||||
'profile_updated' => 'Profil sudah diupdate.', |
|
||||
]; |
]; |
||||
@ -1,40 +0,0 @@ |
|||||
@extends('layouts.app') |
|
||||
|
|
||||
@section('content') |
|
||||
<ul class="breadcrumb hidden-print"> |
|
||||
<li class="active">{{ trans('auth.profile') }}</li> |
|
||||
</ul> |
|
||||
<div class="row"> |
|
||||
<div class="col-md-8 col-md-offset-2"> |
|
||||
{!! Form::model($user, ['route'=>'auth.profile','method'=>'patch']) !!} |
|
||||
<div class="panel panel-default"> |
|
||||
<div class="panel-heading"><h3 class="panel-title">{{ trans('auth.profile') }}</h3></div> |
|
||||
<div class="panel-body"> |
|
||||
<table class="table"> |
|
||||
<tr><th>{{ trans('user.user_id') }}</th><td>{{ $user->id }}</td></tr> |
|
||||
<tr> |
|
||||
<th>{{ trans('user.name') }}</th> |
|
||||
<td>{!! FormField::text('name', ['label' => false]) !!}</td> |
|
||||
</tr> |
|
||||
<tr> |
|
||||
<th>{{ trans('user.email') }}</th> |
|
||||
<td>{!! FormField::email('email', ['label' => false]) !!}</td> |
|
||||
</tr> |
|
||||
<tr> |
|
||||
<th>{{ trans('user.api_token') }}</th> |
|
||||
<td>{{ $user->api_token }}</td> |
|
||||
</tr> |
|
||||
<tr> |
|
||||
<th>{{ trans('user.roles') }}</th> |
|
||||
<td>{{ $user->present()->displayRoles }}</td> |
|
||||
</tr> |
|
||||
</table> |
|
||||
</div> |
|
||||
<div class="panel-footer"> |
|
||||
{!! Form::submit(trans('app.update'), ['class'=>'btn btn-info']) !!} |
|
||||
</div> |
|
||||
</div> |
|
||||
{!! Form::close() !!} |
|
||||
</div> |
|
||||
</div> |
|
||||
@endsection |
|
||||
@ -0,0 +1,31 @@ |
|||||
|
@extends('layouts.app') |
||||
|
|
||||
|
@section('content') |
||||
|
<ul class="breadcrumb hidden-print"> |
||||
|
<li class="active">{{ trans('auth.profile') }}</li> |
||||
|
</ul> |
||||
|
<div class="row"> |
||||
|
<div class="col-md-7"> |
||||
|
<div class="panel panel-default"> |
||||
|
<table class="table"> |
||||
|
<tr><th>{{ trans('user.user_id') }}</th><td>{{ auth()->user()->id }}</td></tr> |
||||
|
<tr> |
||||
|
<th>{{ trans('user.name') }}</th> |
||||
|
<td>{{ auth()->user()->name }}</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<th>{{ trans('user.email') }}</th> |
||||
|
<td>{{ auth()->user()->email }}</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<th>{{ trans('user.api_token') }}</th> |
||||
|
<td><code>{{ auth()->user()->api_token }}</code></td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
<div class="panel-footer"> |
||||
|
{{ link_to_route('users.profile.edit', trans('auth.profile_edit'), [], ['class' => 'btn btn-info']) }} |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
@endsection |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue