Как получить доступ к контроллеру через администраторов и обычных пользователей без использования ролей - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно скачать форму, отправленную от руководителя.Я могу получить доступ к странице, но не к форме, поскольку не могу ее загрузить.Это дает мне ошибку ERR_INVALID_RESPONSE, но руководитель может легко ее загрузить.Может ли быть что-то не так с промежуточным программным обеспечением?Я много боролся, но все еще не могу скачать, пожалуйста, если кто-то может знать проблему, пожалуйста, помогите мне.

Контроллер

class DutiesController extends Controller
{
    public function assignSupervisor(Request $request, $id)
    {
        $assignS = new  Duty;
        $assignS->student_id = $id;
        $assignS->user_id = $request->supervisor_id;
        $assignS->student_name = $request->student_name;
        $assignS->save();

        return back();
    }

    public function assignInstructor(Request $request, $id)
    {
        $assignS = Duty::where('student_id', $id)->first();
        $assignS->admin_id = $request->instructor_id;
        $assignS->save();

        return back();
    }

    public function duties($id)
    {
        $duty = Duty::where('student_id', $id)->orWhere('user_id', $id)->orWhere('admin_id', $id)->first();

        return view('Duty.show', compact('duty'));
    }

    public function assign(Request $request, $id)
    {
        $assign = Duty::findOrfail($id);
        if ($request->hasFile('duty')) {
            $this->validate($request, [
                'duty' => 'required|file|mimes:pdf,doc'
            ]);
            $fileNameWithExt = $request->file('duty')->getClientOriginalName();
            $fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME);
            $extension = $request->file('duty')->getClientOriginalExtension();
            $fileNameToStore = $fileName.'_'.time().'.'.$extension;
            $path = $request->file('duty')->storeAs('public/duty', $fileNameToStore);
            $assign->duty = $fileNameToStore;
        }
        $assign->marks = $request->marks;
        $assign->save();

        return back();
    }

    public function getduty($id) // my download function
    {
        $download = Duty::findOrfail($id);

        return Storage::download("/public/duty/".$download->duty);
    }

    public function assignSupervisorInstructor()
    {
        $users = User::with('campus')->where('role_id', 4)->get();
        $supervisors = User::with('campus')->where('role_id', 2)->get();
        $instructors = Admin::where('role_id', 3)->get();

        return view('Assigning.index', compact('users', 'supervisors', 'instructors'));
    }
}

Маршруты

Route::group(['middleware' => 'auth:web,admin'], function () {
    //Now this routes can be accessible by both admin as well as
    Route::get('/duties/downloads/{id}', 'DutiesController@getduty');
    Route::post('/duties/assign/{id}', 'DutiesController@assign');
    Route::get('/duties/myduties/{id}', 'DutiesController@duties');
    Route::get('/duties/mydutty/{id}', 'DuttyController@duties');
    Route::post('/duties/{id}', 'DutiesController@assignSupervisor');
    Route::get('/assign', 'DutiesController@assignSupervisorInstructor');
    Route::post('/duties/inst/{id}', 'DutiesController@assignInstructor');
});

Клинок

<td>
    <a href="/duties/downloads/{{$duty->id}}">
        <button class="btn btn-success"><i class="fa fa-download"></i> Dowload Document</button>
    </a>
</td>

1 Ответ

0 голосов
/ 08 июля 2019

Надеюсь, это то, что вы имеете в виду, но именно так я различаю типы пользователей с помощью Middleware. По сути, создание собственного промежуточного программного обеспечения (я думаю, вы также можете сделать это с помощью встроенного функционала, но я предпочитаю это), например:

1) MiddleWare: app/Http/Middleware/CheckUserType.php

namespace App\Http\Middleware;
use Auth;
use Closure;
use App\Usergroup;
class CheckUserType
{
    /**
     * This middleware checks if the user is logged in as a specific type
     *
     * @var array
     */
    public function handle($request, Closure $next, ...$userGroups)
    {
        if (in_array(UserGroup::where('id', Auth::user()->groupid)->first()->title, $userGroups)) {
            return $next($request);
        } else {
            return response('Unauthorized...', 401);
        }
    }
}

В моем случае у меня есть таблица групп пользователей, которая ссылается на user-> groupid, поэтому я использую эту модель для перекрестной ссылки на идентификатор группы, которую я передаю в своем маршрутизаторе. Но вы можете изменить это, очевидно. Также обратите внимание, что я делаю ...$userGroups, поэтому я могу перебирать несколько типов пользователей, если я хочу в маршрутизаторе (см. Ниже).

2) Зарегистрируйтесь в вашем ядре: Тогда зарегистрируйтесь в app/Http/Kernel.php: добавить к protected $routeMiddleware: checkUserType' => CheckUserType::class Убедитесь, что вы включили пользовательское промежуточное ПО (use App\Http\Middleware\CheckUserType;)

3) Маршруты: Итак, наконец, в моем маршрутизаторе у меня есть, например, следующее:

/**
* @section Routes that require the user to be a Manager or an Administrator
*/
Route::group(['middleware' => 'checkUserType:Managers,Administrators'], function () {
    //
});

или

/**
* @section Routes that require the user to be an Administrator
*/
Route::group(['middleware' => 'check.usertype:Administrators'], function () {
    // User Routes
    Route::delete('/users/delete/{id}', 'UserController@deleteUser');
});
...