added permission checker for data master
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
namespace App\Helpers;
|
||||
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\RequestException;
|
||||
|
||||
class NextCloudHelper
|
||||
{
|
||||
/**
|
||||
* Create a folder in Nextcloud.
|
||||
*
|
||||
* @param string $baseUrl Nextcloud Base URL
|
||||
* @param string $username Nextcloud Username
|
||||
* @param string $password Nextcloud Password
|
||||
* @param string $folderPath Folder Path to Create
|
||||
* @return array Response Data
|
||||
*/
|
||||
public static function createFolder($baseUrl, $username, $password, $folderPath)
|
||||
{
|
||||
$client = new Client();
|
||||
$url = rtrim($baseUrl, '/') . "/remote.php/dav/files/{$username}/" . ltrim($folderPath, '/');
|
||||
|
||||
try {
|
||||
$response = $client->request('MKCOL', $url, [
|
||||
'auth' => [$username, $password]
|
||||
]);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'status' => $response->getStatusCode(),
|
||||
'message' => 'Folder created successfully.'
|
||||
];
|
||||
} catch (RequestException $e) {
|
||||
return [
|
||||
'success' => false,
|
||||
'status' => $e->getCode(),
|
||||
'message' => $e->getMessage(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Create a user in Nextcloud.
|
||||
*
|
||||
* @param string $baseUrl Nextcloud Base URL
|
||||
* @param string $adminUsername Admin Username
|
||||
* @param string $adminPassword Admin Password
|
||||
* @param string $userId New User ID
|
||||
* @param string $password New User Password
|
||||
* @param string $displayName New User Display Name
|
||||
* @param string $email New User Email
|
||||
* @return array Response Data
|
||||
*/
|
||||
public static function createUser($baseUrl, $adminUsername, $adminPassword, $userId, $password, $displayName, $email)
|
||||
{
|
||||
$client = new Client();
|
||||
$url = rtrim($baseUrl, '/') . "/mktia/ocs/v1.php/cloud/users";
|
||||
|
||||
try {
|
||||
$response = $client->request('POST', $url, [
|
||||
'auth' => [$adminUsername, $adminPassword],
|
||||
'headers' => [
|
||||
'OCS-APIRequest' => 'true',
|
||||
],
|
||||
'form_params' => [
|
||||
'userid' => $userId,
|
||||
'password' => $password,
|
||||
'displayName' => $displayName,
|
||||
'email' => $email
|
||||
]
|
||||
]);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'status' => $response->getStatusCode(),
|
||||
'message' => 'User created successfully.'
|
||||
];
|
||||
} catch (RequestException $e) {
|
||||
return [
|
||||
'success' => false,
|
||||
'status' => $e->getCode(),
|
||||
'message' => $e->getMessage(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a user to a group in Nextcloud.
|
||||
*
|
||||
* @param string $baseUrl Nextcloud Base URL
|
||||
* @param string $adminUsername Admin Username
|
||||
* @param string $adminPassword Admin Password
|
||||
* @param string $userId New User ID
|
||||
* @param string $groupName Group Name
|
||||
* @return array Response Data
|
||||
*/
|
||||
public static function addUserToGroup($baseUrl, $adminUsername, $adminPassword, $userId, $groupName)
|
||||
{
|
||||
$client = new Client();
|
||||
$url = rtrim($baseUrl, '/') . "/mktia/ocs/v1.php/cloud/groups/{$groupName}";
|
||||
|
||||
try {
|
||||
$response = $client->request('POST', $url, [
|
||||
'auth' => [$adminUsername, $adminPassword],
|
||||
'headers' => [
|
||||
'OCS-APIRequest' => 'true',
|
||||
],
|
||||
'form_params' => [
|
||||
'userid' => $userId
|
||||
]
|
||||
]);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'status' => $response->getStatusCode(),
|
||||
'message' => 'User added to group successfully.'
|
||||
];
|
||||
} catch (RequestException $e) {
|
||||
return [
|
||||
'success' => false,
|
||||
'status' => $e->getCode(),
|
||||
'message' => $e->getMessage(),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use App\Helpers\NextcloudHelper;
|
||||
|
||||
class AdminsController extends Controller
|
||||
{
|
||||
@@ -63,8 +64,16 @@ class AdminsController extends Controller
|
||||
$admin->assignRole($request->roles);
|
||||
}
|
||||
|
||||
session()->flash('success', __('Admin has been created.'));
|
||||
return redirect()->route('admin.admins.index');
|
||||
// Create a folder in Nextcloud
|
||||
$response = NextcloudHelper::createUser(env('NEXT_CLOUD_URL'), env('NEXT_CLOUD_USERNAME'), env('NEXT_CLOUD_PASSWORD'), $request->username, $request->password, $request->name, $request->email);
|
||||
|
||||
if ($response['success']) {
|
||||
session()->flash('success', __('Admin has been created.'));
|
||||
return redirect()->route('admin.admins.index');
|
||||
} else {
|
||||
session()->flash('error', $response['message']);
|
||||
return redirect()->route('admin.admins.index');
|
||||
}
|
||||
}
|
||||
|
||||
public function edit(int $id): Renderable
|
||||
|
||||
@@ -10,6 +10,7 @@ class CategoryController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['category.view']);
|
||||
return view('backend.pages.master.category.index', [
|
||||
'categories' => Kategori::all()
|
||||
]);
|
||||
@@ -17,11 +18,13 @@ class CategoryController extends Controller
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['category.create']);
|
||||
return view('backend.pages.master.category.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['category.create']);
|
||||
$request->validate([
|
||||
'name' => 'required|unique:kategori,name',
|
||||
'account_number' => 'required|unique:kategori,account_number'
|
||||
@@ -38,6 +41,7 @@ class CategoryController extends Controller
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['category.edit']);
|
||||
return view('backend.pages.master.category.edit', [
|
||||
'category' => Kategori::findOrfail($id)
|
||||
]);
|
||||
@@ -45,6 +49,7 @@ class CategoryController extends Controller
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['category.edit']);
|
||||
$request->validate([
|
||||
'name' => 'required|unique:kategori,name,' . $id . ',id',
|
||||
'account_number' => 'required|unique:kategori,account_number,' . $id . ',id'
|
||||
@@ -61,6 +66,7 @@ class CategoryController extends Controller
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['category.delete']);
|
||||
Kategori::findOrfail($id)->delete();
|
||||
|
||||
session()->flash('success', 'Category has been deleted.');
|
||||
|
||||
@@ -10,6 +10,7 @@ class CostCentreController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['cost.view']);
|
||||
return view('backend.pages.master.cost.index', [
|
||||
'costs' => CostCentre::all()
|
||||
]);
|
||||
@@ -17,11 +18,13 @@ class CostCentreController extends Controller
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['cost.create']);
|
||||
return view('backend.pages.master.cost.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['cost.create']);
|
||||
$request->validate([
|
||||
'code' => 'required|unique:cost_centre,code',
|
||||
'name' => 'required|unique:cost_centre,name'
|
||||
@@ -38,6 +41,7 @@ class CostCentreController extends Controller
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['cost.edit']);
|
||||
return view('backend.pages.master.cost.edit', [
|
||||
'cost' => CostCentre::findOrfail($id)
|
||||
]);
|
||||
@@ -45,6 +49,7 @@ class CostCentreController extends Controller
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['cost.edit']);
|
||||
$request->validate([
|
||||
'code' => 'required|unique:cost_centre,code,' . $id . ',id',
|
||||
'name' => 'required|unique:cost_centre,name,' . $id . ',id'
|
||||
@@ -61,6 +66,7 @@ class CostCentreController extends Controller
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['cost.delete']);
|
||||
CostCentre::findOrfail($id)->delete();
|
||||
|
||||
session()->flash('success', 'Cost has been deleted.');
|
||||
|
||||
@@ -10,6 +10,7 @@ class RayonController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['rayon.view']);
|
||||
return view('backend.pages.master.rayon.index', [
|
||||
'rayons' => Rayon::all()
|
||||
]);
|
||||
@@ -17,11 +18,13 @@ class RayonController extends Controller
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['rayon.create']);
|
||||
return view('backend.pages.master.rayon.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['rayon.create']);
|
||||
$request->validate([
|
||||
'code' => 'required|unique:rayon,code',
|
||||
'name' => 'required|unique:rayon,name'
|
||||
@@ -38,6 +41,7 @@ class RayonController extends Controller
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['rayon.edit']);
|
||||
return view('backend.pages.master.rayon.edit', [
|
||||
'rayon' => Rayon::findOrfail($id)
|
||||
]);
|
||||
@@ -45,6 +49,7 @@ class RayonController extends Controller
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['rayon.edit']);
|
||||
$request->validate([
|
||||
'code' => 'required|unique:rayon,code,' . $id . ',id',
|
||||
'name' => 'required|unique:rayon,name,' . $id . ',id'
|
||||
@@ -61,6 +66,7 @@ class RayonController extends Controller
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['rayon.delete']);
|
||||
Rayon::findOrfail($id)->delete();
|
||||
|
||||
session()->flash('success', 'Rayon has been deleted.');
|
||||
|
||||
Reference in New Issue
Block a user