29 changed files with 147 additions and 574 deletions
-
16app/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
-
142app/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
-
7resources/views/layouts/partials/sidebar.blade.php
-
11resources/views/pages/home.blade.php
-
3resources/views/users/create.blade.php
-
10resources/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 |
|||
|
|||
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.', |
|||
'throttle' => 'Terlalu banyak usaha masuk. Silahkan coba lagi dalam :seconds detik.', |
|||
'email' => 'Email', |
|||
'password' => 'Password', |
|||
'login' => 'Login', |
|||
'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', |
|||
'password_changed' => 'Password berhasil diubah.', |
|||
'forgot_password' => 'Lupa 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', |
|||
'old_password' => 'Password Lama', |
|||
'new_password' => '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