Files
streamline-emr/docker/_streamline-src/app/Http/Controllers/RoleController.php
T

150 lines
4.6 KiB
PHP
Executable File

<?php
namespace Streamline\Http\Controllers;
use Illuminate\Http\Request;
use Streamline\Enums\Roles;
use Streamline\Http\Controllers\Controller;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use DB;
use Streamline\Models\PermissionCategory;
use Auth;
class RoleController extends Controller {
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
function __construct() {
$this->middleware('permission:role-list');
$this->middleware('permission:role-create', ['only' => ['create', 'store']]);
$this->middleware('permission:role-edit', ['only' => ['edit', 'update']]);
$this->middleware('permission:role-delete', ['only' => ['destroy']]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request) {
if (Auth::user()->hasRole(Roles::SUPER_ADMIN->value)) {
$roles = Role::withCount('users')->withCount('permissions')->orderBy('name')->get();
} else {
$roles = Role::where('name', '!=', 'Super Admin')->withCount('users')->withCount('permissions')->orderBy('name')->get();
}
return view('roles.index', compact('roles'))->with('i', ($request->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create() {
$categories = PermissionCategory::orderBy('name')->get();
return view('roles.create', compact('categories'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request) {
$this->validate($request, [
'name' => 'required|unique:roles,name',
'permission' => 'required',
], [
'name.required' => 'Name of the role is required',
'name.unique' => 'The role name is already registered on stre@mline',
'permission.required' => 'Select some permissions for the role'
]);
$role = Role::create(['name' => $request->input('name')]);
$role->syncPermissions($request->input('permission'));
return redirect()->route('roles.index')->with('success', 'Role created successfully');
}
public function show($id) {
$role = Role::find($id);
$rolePermissions = Permission::join("role_has_permissions", "role_has_permissions.permission_id", "=", "permissions.id")
->where("role_has_permissions.role_id", $id)
->orderBy('permission_category_id')
->get();
return view('roles.show', compact('role', 'rolePermissions'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id) {
$role = Role::find($id);
$categories = PermissionCategory::where(['is_module_active' => 1])->orderBy('name')->get();
$rolePermissions = DB::table("role_has_permissions")->where("role_id", $id)->pluck('permission_id', 'permission_id')->all();
return view('roles.edit', compact('role', 'rolePermissions', 'categories'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id) {
$this->validate($request, [
'name' => 'required',
'permission' => 'required',
]);
$role = Role::find($id);
$role->name = $request->input('name');
$role->save();
$role->syncPermissions($request->input('permission'));
return redirect()->route('roles.index')->with('success', 'Role updated successfully');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id) {
DB::table("roles")->where('id', $id)->delete();
return redirect()->route('roles.index')->with('success', 'Role has been deactivated.');
}
public function edit_permission_desc(Request $request) {
$permission = Permission::find($request->permission_id);
$permission->long_description = $request->permission_desc;
if ($permission->save()) {
return 1;
} else {
return 0;
}
}
}