Błąd w nadawaniu uprawnień - laravel 5.2

0

Witam. Mam problem z nadaniem uprawnień użytkownikom. Myślę że coś jest z kodem gdyż pojawia się komunikat
'SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from userroles where (0 = 167 and 1 = 2) limit 1)'

	public function logowanie(Request $request)
	{
		$haslo = $request->input('haslo');
		$nick = $request->input('nick');
		$user = User::where(['nick'=>$nick])->first();
	
		if ($user && Hash::check($haslo, $user->haslo))
		{
			$role = Roles::where(['nick' => 'admin'])->first();
			$user_role = UserRoles::where([['user_id' => $user->id], ['role_id' => $role->id]])->first();
			if ($user_role)
			{
				Auth::login($user);
				return view('users');
			}
		}
		else
		{
			echo 'Błędne dane!';
		}
		$this->validate($request, [
				'nick'            => 'required|max:255',
				'haslo'           => 'required|max:255',
		]);
	
	} 

Tabele:

 CREATE TABLE `uzytkownicy` (
  `id` int(11) NOT NULL,
  `nick` varchar(32) NOT NULL,
  `haslo` varchar(150) NOT NULL,
  `email` varchar(40) NOT NULL,
  `_token` varchar(50) NOT NULL,
  `role_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


```sql
CREATE TABLE`roles` (
  `id` int(11) NOT NULL,
  `nick` varchar(60) NOT NULL,
  `haslo` varchar(60) NOT NULL,
  `email` varchar(60) NOT NULL,
  `_token` varchar(105) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `userroles` (
  `user_id` int(11) NOT NULL,
  `role_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
0

za dużo tablic

UserRoles::where([['user_id' => $user->id], ['role_id' => $role->id]]) 

zrób

UserRoles::where(['user_id' => $user->id, 'role_id' => $role->id])

a najlepiej

UserRoles::where('user_id' => $user->id)->where('role_id' => $role->id)
0

Ok. uzytkownika podanego podczas rejestracji w tablicy uzytkownicy widzi, ale nie uzupełnia automatycznie bazy userroles, gdzie powinny byc przechowywane id dodanych uzytkownikow. Admina w ogóle nie widzi, mimo że jego id mam w bazie uzytkownicy i foreightkey mam połaczone odpowiednio roles(id)->uzytkownicy(roles_id).

Mógłbyś mi po krótce opisać w jaki sposób mam połączyć te trzy tablice?

0

Podałeś nam tylko kod na logowanie, a nie na rejestracje więc możemy sobie zgadywać co tam nie działa. Być może tworząc relacje nie dałeś wszystkich parametrów do funkcji bo domyślnie pivot powinien nazywać się role_user (nazwy łączonych modeli w kolejności alfabetycznej, oddzielone podłogą - co w sumie możesz ręcznie i tak nadpisać, ale nie wiemy czy to zrobiłeś).

Dodatkowo jeżeli tworzysz relację many2many to po co w tabeli użytkownicy masz kolumnę 'role_id'?

Najłatwiej jak byś stworzył sobie w modelu użytkowników funkcje pomocniczą hasRole(nazwa_roli) zwracającą true lub false.

Wtedy dajesz np. if ($user->hasRole('admin')) { bla bla bla} i po kłopocie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1