Browse Source

Remove user action authorization by role

pull/1/head
Nafies Luthfi 8 years ago
parent
commit
69b9e6af5a
  1. 2
      app/Entities/BaseRepository.php
  2. 6
      app/Http/Requests/Projects/CreateRequest.php
  3. 7
      app/Http/Requests/Projects/DeleteRequest.php
  4. 5
      app/Http/Requests/Projects/UpdateRequest.php
  5. 2
      app/Providers/AuthServiceProvider.php
  6. 2
      routes/web/invoices.php
  7. 8
      routes/web/payments.php
  8. 40
      routes/web/projects.php
  9. 2
      routes/web/references.php
  10. 37
      routes/web/reports.php
  11. 6
      routes/web/subscriptions.php
  12. 8
      routes/web/users.php
  13. 2
      tests/Feature/ManageSubscriptionsTest.php
  14. 4
      tests/TestCase.php

2
app/Entities/BaseRepository.php

@ -25,7 +25,7 @@ abstract class BaseRepository extends EloquentRepository
public function getWorkersList() public function getWorkersList()
{ {
return User::orderBy('name')->hasRoles(['worker'])->pluck('name', 'id');
return User::orderBy('name')->pluck('name', 'id');
} }
public function getVendorsList() public function getVendorsList()

6
app/Http/Requests/Projects/CreateRequest.php

@ -2,9 +2,11 @@
namespace App\Http\Requests\Projects; namespace App\Http\Requests\Projects;
use App\Entities\Projects\Project;
use App\Http\Requests\Request; use App\Http\Requests\Request;
class CreateRequest extends Request {
class CreateRequest extends Request
{
/** /**
* Determine if the user is authorized to make this request. * Determine if the user is authorized to make this request.
@ -13,7 +15,7 @@ class CreateRequest extends Request {
*/ */
public function authorize() public function authorize()
{ {
return auth()->user()->can('add_project');
return auth()->user()->can('create', new Project);
} }
/** /**

7
app/Http/Requests/Projects/DeleteRequest.php

@ -5,7 +5,8 @@ namespace App\Http\Requests\Projects;
use App\Entities\Projects\Project; use App\Entities\Projects\Project;
use App\Http\Requests\Request; use App\Http\Requests\Request;
class DeleteRequest extends Request {
class DeleteRequest extends Request
{
/** /**
* Determine if the user is authorized to make this request. * Determine if the user is authorized to make this request.
@ -15,7 +16,7 @@ class DeleteRequest extends Request {
public function authorize() public function authorize()
{ {
$project = Project::findOrFail($this->segment(2)); $project = Project::findOrFail($this->segment(2));
return auth()->user()->can('manage_project', $project);
return auth()->user()->can('update', $project);
} }
/** /**
@ -26,7 +27,7 @@ class DeleteRequest extends Request {
public function rules() public function rules()
{ {
return [ return [
'project_id' => 'required'
'project_id' => 'required',
]; ];
} }

5
app/Http/Requests/Projects/UpdateRequest.php

@ -5,7 +5,8 @@ namespace App\Http\Requests\Projects;
use App\Entities\Projects\Project; use App\Entities\Projects\Project;
use App\Http\Requests\Request; use App\Http\Requests\Request;
class UpdateRequest extends Request {
class UpdateRequest extends Request
{
/** /**
* Determine if the user is authorized to make this request. * Determine if the user is authorized to make this request.
@ -15,7 +16,7 @@ class UpdateRequest extends Request {
public function authorize() public function authorize()
{ {
$project = Project::findOrFail($this->segment(2)); $project = Project::findOrFail($this->segment(2));
return auth()->user()->can('manage_project', $project);
return auth()->user()->can('update', $project);
} }
/** /**

2
app/Providers/AuthServiceProvider.php

@ -31,7 +31,7 @@ class AuthServiceProvider extends ServiceProvider
// Dynamically register permissions with Laravel's Gate. // Dynamically register permissions with Laravel's Gate.
foreach ($this->getPermissions() as $permission) { foreach ($this->getPermissions() as $permission) {
Gate::define($permission, function ($user) { Gate::define($permission, function ($user) {
return $user->hasRole('admin');
return ! is_null($user->agency);
}); });
} }

2
routes/web/invoices.php

@ -1,6 +1,6 @@
<?php <?php
Route::group(['middleware' => ['web','role:admin']], function() {
Route::group(['middleware' => ['web', 'auth']], function () {
/* /*
* Invoice Draft Routes * Invoice Draft Routes
*/ */

8
routes/web/payments.php

@ -1,10 +1,10 @@
<?php <?php
Route::group(['middleware' => ['web','role:admin']], function() {
Route::group(['middleware' => ['web', 'auth']], function () {
/** /**
* Payments Routes * Payments Routes
*/ */
Route::get('payments/{payment}/pdf', ['as'=>'payments.pdf', 'uses'=>'PaymentsController@pdf']);
Route::get('payments/{payment}/delete', ['as'=>'payments.delete', 'uses'=>'PaymentsController@delete']);
Route::resource('payments','PaymentsController');
Route::get('payments/{payment}/pdf', ['as' => 'payments.pdf', 'uses' => 'PaymentsController@pdf']);
Route::get('payments/{payment}/delete', ['as' => 'payments.delete', 'uses' => 'PaymentsController@delete']);
Route::resource('payments', 'PaymentsController');
}); });

40
routes/web/projects.php

@ -1,41 +1,41 @@
<?php <?php
Route::group(['middleware' => ['web','role:admin'], 'namespace' => 'Projects'], function () {
Route::group(['middleware' => ['web', 'auth'], 'namespace' => 'Projects'], function () {
/** /**
* Projects Routes * Projects Routes
*/ */
Route::get('projects/{id}/delete', ['as'=>'projects.delete', 'uses'=>'ProjectsController@delete']);
Route::get('projects/{id}/features', ['as'=>'projects.features', 'uses'=>'ProjectsController@features']);
Route::get('projects/{id}/features-export/{type?}', ['as'=>'projects.features-export', 'uses'=>'ProjectsController@featuresExport']);
Route::get('projects/{id}/payments', ['as'=>'projects.payments', 'uses'=>'ProjectsController@payments']);
Route::get('projects/{id}/subscriptions', ['as'=>'projects.subscriptions', 'uses'=>'ProjectsController@subscriptions']);
Route::post('projects/{id}/features-reorder', ['as'=>'projects.features-reorder', 'uses'=>'ProjectsController@featuresReorder']);
Route::patch('projects/{id}/status-update', ['as'=>'projects.status-update', 'uses'=>'ProjectsController@statusUpdate']);
Route::get('projects/{id}/delete', ['as' => 'projects.delete', 'uses' => 'ProjectsController@delete']);
Route::get('projects/{id}/features', ['as' => 'projects.features', 'uses' => 'ProjectsController@features']);
Route::get('projects/{id}/features-export/{type?}', ['as' => 'projects.features-export', 'uses' => 'ProjectsController@featuresExport']);
Route::get('projects/{id}/payments', ['as' => 'projects.payments', 'uses' => 'ProjectsController@payments']);
Route::get('projects/{id}/subscriptions', ['as' => 'projects.subscriptions', 'uses' => 'ProjectsController@subscriptions']);
Route::post('projects/{id}/features-reorder', ['as' => 'projects.features-reorder', 'uses' => 'ProjectsController@featuresReorder']);
Route::patch('projects/{id}/status-update', ['as' => 'projects.status-update', 'uses' => 'ProjectsController@statusUpdate']);
Route::resource('projects', 'ProjectsController'); Route::resource('projects', 'ProjectsController');
/** /**
* Project Invoices Routes * Project Invoices Routes
*/ */
Route::get('projects/{project}/invoices', ['as'=>'projects.invoices', 'uses'=>'InvoicesController@index']);
Route::get('projects/{project}/invoices', ['as' => 'projects.invoices', 'uses' => 'InvoicesController@index']);
/** /**
* Features Routes * Features Routes
*/ */
Route::get('projects/{id}/features/create', ['as'=>'features.create', 'uses'=>'FeaturesController@create']);
Route::get('projects/{id}/features/add-from-other-project', ['as'=>'features.add-from-other-project', 'uses'=>'FeaturesController@addFromOtherProject']);
Route::post('features/{id}/tasks-reorder', ['as'=>'features.tasks-reorder', 'uses'=>'FeaturesController@tasksReorder']);
Route::post('projects/{id}/features', ['as'=>'features.store', 'uses'=>'FeaturesController@store']);
Route::post('projects/{id}/features/store-from-other-project', ['as'=>'features.store-from-other-project', 'uses'=>'FeaturesController@storeFromOtherProject']);
Route::get('features/{id}/delete', ['as'=>'features.delete', 'uses'=>'FeaturesController@delete']);
Route::resource('features', 'FeaturesController', ['except' => ['create','store']]);
Route::get('projects/{id}/features/create', ['as' => 'features.create', 'uses' => 'FeaturesController@create']);
Route::get('projects/{id}/features/add-from-other-project', ['as' => 'features.add-from-other-project', 'uses' => 'FeaturesController@addFromOtherProject']);
Route::post('features/{id}/tasks-reorder', ['as' => 'features.tasks-reorder', 'uses' => 'FeaturesController@tasksReorder']);
Route::post('projects/{id}/features', ['as' => 'features.store', 'uses' => 'FeaturesController@store']);
Route::post('projects/{id}/features/store-from-other-project', ['as' => 'features.store-from-other-project', 'uses' => 'FeaturesController@storeFromOtherProject']);
Route::get('features/{id}/delete', ['as' => 'features.delete', 'uses' => 'FeaturesController@delete']);
Route::resource('features', 'FeaturesController', ['except' => ['create', 'store']]);
/** /**
* Tasks Routes * Tasks Routes
*/ */
Route::get('features/{id}/tasks/create', ['as'=>'tasks.create', 'uses'=>'TasksController@create']);
Route::post('features/{id}/tasks', ['as'=>'tasks.store', 'uses'=>'TasksController@store']);
Route::patch('task/{id}', ['as'=>'tasks.update', 'uses'=>'TasksController@update']);
Route::delete('task/{id}', ['as'=>'tasks.destroy', 'uses'=>'TasksController@destroy']);
Route::get('features/{id}/tasks/create', ['as' => 'tasks.create', 'uses' => 'TasksController@create']);
Route::post('features/{id}/tasks', ['as' => 'tasks.store', 'uses' => 'TasksController@store']);
Route::patch('task/{id}', ['as' => 'tasks.update', 'uses' => 'TasksController@update']);
Route::delete('task/{id}', ['as' => 'tasks.destroy', 'uses' => 'TasksController@destroy']);
/** /**
* Files Routes * Files Routes

2
routes/web/references.php

@ -1,6 +1,6 @@
<?php <?php
Route::group(['namespace' => 'References', 'middleware' => ['web', 'role:admin']], function () {
Route::group(['namespace' => 'References', 'middleware' => ['web', 'auth']], function () {
/** /**
* Options Routes * Options Routes
*/ */

37
routes/web/reports.php

@ -1,39 +1,42 @@
<?php <?php
Route::group(['middleware' => ['web','role:admin'],'prefix' => 'reports'], function() {
Route::group(['middleware' => ['web', 'auth'], 'prefix' => 'reports'], function () {
/** /**
* Reports Routes * Reports Routes
*/ */
Route::get('payments', ['as'=>'reports.payments.index', 'uses' => 'ReportsController@monthly']);
Route::get('payments/daily', ['as'=>'reports.payments.daily', 'uses' => 'ReportsController@daily']);
Route::get('payments/monthly', ['as'=>'reports.payments.monthly', 'uses' => 'ReportsController@monthly']);
Route::get('payments/yearly', ['as'=>'reports.payments.yearly', 'uses' => 'ReportsController@yearly']);
Route::get('current-credits', ['as'=>'reports.current-credits', 'uses' => 'ReportsController@currentCredits']);
Route::get('log-files', ['as' => 'log-files.index', 'uses' => function() {
if (!file_exists(storage_path('logs')))
Route::get('payments', ['as' => 'reports.payments.index', 'uses' => 'ReportsController@monthly']);
Route::get('payments/daily', ['as' => 'reports.payments.daily', 'uses' => 'ReportsController@daily']);
Route::get('payments/monthly', ['as' => 'reports.payments.monthly', 'uses' => 'ReportsController@monthly']);
Route::get('payments/yearly', ['as' => 'reports.payments.yearly', 'uses' => 'ReportsController@yearly']);
Route::get('current-credits', ['as' => 'reports.current-credits', 'uses' => 'ReportsController@currentCredits']);
Route::get('log-files', ['as' => 'log-files.index', 'uses' => function () {
if ( ! file_exists(storage_path('logs'))) {
return []; return [];
}
$logFiles = \File::allFiles(storage_path('logs')); $logFiles = \File::allFiles(storage_path('logs'));
// Sort files by modified time DESC // Sort files by modified time DESC
usort($logFiles, function($a, $b) {
usort($logFiles, function ($a, $b) {
return -1 * strcmp($a->getMTime(), $b->getMTime()); return -1 * strcmp($a->getMTime(), $b->getMTime());
}); });
return view('reports.log-files',compact('logFiles'));
return view('reports.log-files', compact('logFiles'));
}]); }]);
Route::get('log-files/{filename}', ['as' => 'log-files.show', 'uses' => function($fileName) {
if (file_exists(storage_path('logs/' . $fileName)))
return response()->file(storage_path('logs/' . $fileName), ['content-type' => 'text/plain']);
Route::get('log-files/{filename}', ['as' => 'log-files.show', 'uses' => function ($fileName) {
if (file_exists(storage_path('logs/'.$fileName))) {
return response()->file(storage_path('logs/'.$fileName), ['content-type' => 'text/plain']);
}
return 'Invalid file name.'; return 'Invalid file name.';
}]); }]);
Route::get('log-files/{filename}/download', ['as' => 'log-files.download', 'uses' => function($fileName) {
if (file_exists(storage_path('logs/' . $fileName)))
return response()->download(storage_path('logs/' . $fileName), env('APP_ENV') . '.' . $fileName);
Route::get('log-files/{filename}/download', ['as' => 'log-files.download', 'uses' => function ($fileName) {
if (file_exists(storage_path('logs/'.$fileName))) {
return response()->download(storage_path('logs/'.$fileName), env('APP_ENV').'.'.$fileName);
}
return 'Invalid file name.'; return 'Invalid file name.';
}]); }]);

6
routes/web/subscriptions.php

@ -1,9 +1,9 @@
<?php <?php
Route::group(['middleware' => ['web','role:admin']], function() {
Route::group(['middleware' => ['web', 'auth']], function () {
/** /**
* Subscriptions Routes * Subscriptions Routes
*/ */
Route::get('subscriptions/{id}/delete', ['as'=>'subscriptions.delete', 'uses'=>'SubscriptionsController@delete']);
Route::resource('subscriptions','SubscriptionsController');
Route::get('subscriptions/{id}/delete', ['as' => 'subscriptions.delete', 'uses' => 'SubscriptionsController@delete']);
Route::resource('subscriptions', 'SubscriptionsController');
}); });

8
routes/web/users.php

@ -1,14 +1,14 @@
<?php <?php
Route::group(['middleware' => ['web','role:admin'], 'namespace' => 'Users'], function() {
Route::group(['middleware' => ['web', 'auth'], 'namespace' => 'Users'], function () {
/** /**
* Users Routes * Users Routes
*/ */
Route::get('users/{id}/delete', ['as'=>'users.delete', 'uses'=>'UsersController@delete']);
Route::resource('users','UsersController');
Route::get('users/{id}/delete', ['as' => 'users.delete', 'uses' => 'UsersController@delete']);
Route::resource('users', 'UsersController');
/** /**
* Roles Routes * Roles Routes
*/ */
Route::resource('roles','RolesController');
Route::resource('roles', 'RolesController');
}); });

2
tests/Feature/ManageSubscriptionsTest.php

@ -34,8 +34,8 @@ class ManageSubscriptionsTest extends TestCase
$this->type('', 'remark'); $this->type('', 'remark');
$this->press(trans('subscription.create')); $this->press(trans('subscription.create'));
$this->seePageIs(route('subscriptions.index'));
$this->see(trans('subscription.created')); $this->see(trans('subscription.created'));
$this->seePageIs(route('subscriptions.index'));
$this->seeInDatabase('subscriptions', [ $this->seeInDatabase('subscriptions', [
'project_id' => $project->id, 'project_id' => $project->id,

4
tests/TestCase.php

@ -32,7 +32,7 @@ abstract class TestCase extends BaseTestCase
protected function userSigningIn() protected function userSigningIn()
{ {
$user = factory(User::class)->create();
$user = $this->createUser();
$this->actingAs($user); $this->actingAs($user);
return $user; return $user;
@ -41,8 +41,6 @@ abstract class TestCase extends BaseTestCase
protected function createUser($role = 'admin') protected function createUser($role = 'admin')
{ {
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$user->assignRole($role);
return $user; return $user;
} }

Loading…
Cancel
Save