Merhabalar, Laravel ile bir CRM geliştiriyorum. Şimdilik 9 tane yetki var ve bu rakam 20 lere kadar çıkacak. Giriş yapan kişininin yetkisine göre yönlendireceği sayfanın ayrı olmasını istiyorum. Laravel de yeni olduğum için kendimce bir yönlendirme sistemi geliştirdim ancak daha iyisi olabileceğini düşünüyorum.
Benim yapmış olduğum yöntem;
`public function authenticate(Request $request)
{
$request->flash();
$credentials = $request->only('email', 'password');
$remember_me = $request->has('remember_me') ? true : false;
if (Auth::attempt($credentials, $remember_me)) {
$user_id = Auth::user()->id;
$role = DB::table('view_user_role')->where('id', $user_id)->first();
$role = $role->name;
switch ($role) {
case 'admin':
$route = 'home.Index';
break;
case 'agencies_specialist':
$route = 'agency.Index';
break;
default:
$route = 'home.Index';
break;
}
return redirect()->intended(route($route))->with('success', 'Hoşgeldin ' . Auth::user()->name_surname);
} else {
return back()->with('error', 'E-Mail veya Şifre Hatalı!');
}
}`
Giriş yapan kişinin yetkisini alıyorum ve yetkiye göre yönlendirme yapıyorum. Burayı daha farklı nasıl geliştirebilirim?
Ayrıca Rotalarımın middleware ile giriş yapan kişinin yetkisine göre erişim izni vermek istiyorum. Şimdilik rotalarım bu şekilde;
` Route::middleware(['admin'])->group(function () {
Route::get('/Dashboard', 'DefaultController@index')
->name('home.Index');
Route::prefix('/Module')->group(function () {
Route::name('module.')->group(function () {
Route::get('/', 'Module\ModuleController@index')->name('Index');
### Role Transactions ###
Route::get('AddRole', 'Module\ModuleController@addRole')->name('AddRole');
Route::post('AddRole', 'Module\ModuleController@insertRole')->name('InsertRole');
Route::post('DestroyRole', 'Module\ModuleController@detroyRole')->name('DetroyRole');
Route::get('EditRole/{id}', 'Module\ModuleController@editRole')->name('EditRole');
Route::post('EditRole/{id}', 'Module\ModuleController@updateRole')->name('UpdateRole');
### ModuleGroups Transactions ###
Route::get('AddModuleGroup', 'Module\ModuleController@addModuleGroup')->name('AddModuleGrpup');
Route::post('AddModuleGroup', 'Module\ModuleController@insertModuleGroup')->name('ModuleGroup');
Route::post('DestroyModuleGroup', 'Module\ModuleController@detroyModuleGroup')->name('DetroyModuleGroup');
Route::get('EditModuleGroup/{id}', 'Module\ModuleController@editModuleGroup')->name('EditModuleGroup');
Route::post('EditModuleGroup/{id}', 'Module\ModuleController@updateModuleGroup')->name('UpdateModuleGroup');
### Modules Transactions ###
Route::get('AddModule', 'Module\ModuleController@addModule')->name('AddModule');
Route::post('AddModule', 'Module\ModuleController@insertModule')->name('InsertModule');
Route::post('DestroyModule', 'Module\ModuleController@detroyModule')->name('DetroyModule');
Route::get('EditModule/{id}', 'Module\ModuleController@editModule')->name('EditModule');
Route::post('EditModule/{id}', 'Module\ModuleController@updateModule')->name('UpdateModule');
### SubModules Transactions ###
Route::get('AddSubModule', 'Module\ModuleController@addSubModule')->name('AddSubModule');
Route::post('AddSubModule', 'Module\ModuleController@insertSubModule')->name('InsertSubModule');
Route::post('DestroySubModule', 'Module\ModuleController@detroySubModule')->name('DetroySubModule');
Route::get('EditSubModule/{id}', 'Module\ModuleController@editSubModule')->name('EditSubModule');
Route::post('EditSubModule/{id}', 'Module\ModuleController@updateSubModule')->name('UpdateSubModule');
Route::get('Sorting', 'Module\SortingController@index')->name('Sorting');
Route::post('MgSort', 'Module\SortingController@moduleGroupSorting')->name('mg.Sort');
Route::post('ModuleSort', 'Module\SortingController@moduleSorting')->name('module.Sort');
Route::post('SubModuleSort', 'Module\SortingController@subModuleSorting')->name('subModule.Sort');
});
### ==> RoleSubModule Permissions Transactions <== ###
Route::post('GetSubModuleOfRole', 'Module\ModuleController@getSubModuleOfRole');
Route::post('GetNonPermissionsOfRole', 'Module\ModuleController@getNonPermissionsOfRole');
Route::post('AddSubModuleToRole', 'Module\ModuleController@insertSubModuleToRole');
Route::post('DestroyModuleOfRole', 'Module\ModuleController@destroySubModuleOfRole');
});
Route::prefix('/Users')->group(function () {
Route::name('user.gm.')->group(function () {
## ==> General Managment Transactions <== ##
Route::get('/', 'User\UserGm\UserController@index')->name('Index');
Route::get('AddUser', 'User\UserGM\UserController@addUser')->name('AddUser');
Route::post('AddUser', 'User\UserGM\UserController@insertUser')->name('Insert');
Route::get('EditUser/{id}', 'User\UserGM\UserController@editUser')->name('EditUser')->where(['id' => '[0-9]+']);
Route::post('EditUser/{id}', 'User\UserGM\UserController@updateUser')->name('Update')->where(['id' => '[0-9]+']);
Route::post('Destroy', 'User\UserGM\UserController@destroyUser');
## Ajax ==> Email There Is Check <== Ajax ##
Route::post('CheckEmail', 'User\UserGM\UserController@checkEmail');
});
});
Route::prefix('/Agencies')->group(function () {
Route::name('agency.')->group(function () {
Route::get('', 'Agency\AgencyController@index')->name('Index');
Route::get('AddAgency', 'Agency\AgencyController@addAgency')->name('AddAgency');
Route::post('AddAgency', 'Agency\AgencyController@insertAgency')->name('InsertAgency');
Route::get('EditAgency/{id}', 'Agency\AgencyController@editAgency')->name('EditAgency')
->where(['id' => '[0-9]+']);
Route::post('EditAgency/{id}', 'Agency\AgencyController@updateAgency')->name('UpdateAgency')
->where(['id' => '[0-9]+']);
Route::post('DestroyAgency', 'Agency\AgencyController@destroyAgency')->name('DestroyAgency');
### ==> Ajax Info <== ###
Route::post('Info', 'Agency\AgencyController@agencyInfo')->name('Info');
});
});
});
Route::middleware(['AgenciesSpecialist'])->group(function () {
Route::prefix('/Agencies')->group(function () {
Route::name('agency.')->group(function () {
Route::get('', 'Agency\AgencyController@index')->name('Index');
Route::get('AddAgency', 'Agency\AgencyController@addAgency')->name('AddAgency');
Route::post('AddAgency', 'Agency\AgencyController@insertAgency')->name('InsertAgency');
Route::get('EditAgency/{id}', 'Agency\AgencyController@editAgency')->name('EditAgency')
->where(['id' => '[0-9]+']);
Route::post('EditAgency/{id}', 'Agency\AgencyController@updateAgency')->name('UpdateAgency')
->where(['id' => '[0-9]+']);
Route::post('DestroyAgency', 'Agency\AgencyController@destroyAgency')->name('DestroyAgency');
### ==> Ajax Info <== ###
Route::post('Info', 'Agency\AgencyController@agencyInfo')->name('Info');
});
});
});`
Burada görüldüğü gibi 2 adet middleware var bir tanesi AgenciesSpecialist ve diğeri de admin. Şimdilik sadece bu iki yetkinin modüllerini bitirebildim ve dediğim gibi 20 küsür rol ve modülleri olacak. Burada Agencies modülüme adminin de erişmesi gerekiyor ve bunun için mecburen AgenciesSpecialist modülünde saçma bir yapı kullanarak hem admine hemde AgenciesSpecialist rolüne izin vermek zorunda kaldım. Her yetki için modül tanımlandığında admini de dahil etmek çok saçma gekdi bunu da farklı nasıl yapabilirim? AgenciesSpecialist Middleware'i ise şu şekilde;
public function handle(Request $request, Closure $next)
{
if (!Auth::guest() && (Auth::user()->role_id == 35 || Auth::user()->role_id == 1)) {
return $next($request);
} else {
return back()->with('error', 'Yetkiniz yok!');
return redirect(route('Login'))->with('error', 'Lütfen Giriş Yapın!');
}
}
Değerli yardımlarınız için şimdiden teşekkür ederim.