Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inny]Laravel problem z rolami użytkownika, nie bierze pod uwagę warunku
casperii
post
Post #1





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


Panowie, przejdę może od razu do rzeczy, mam kod:

Role.php :
  1. <?php
  2.  
  3. namespace App;
  4.  
  5. use Illuminate\Database\Eloquent\Model;
  6.  
  7. class Role extends Model
  8. {
  9.  
  10. public $guarded = [];
  11. public $timestamps = false;
  12.  
  13. public function users()
  14. {
  15. return $this->belongsToMany('App\User');
  16. }
  17. }


oraz RegisterController.php

  1. if(!Role::where('name','type')->exists())
  2. {
  3. Role::create(['name'=>'person']);
  4. Role::create(['name'=>'firm']);
  5. }
  6.  
  7. //sprawdzamy czy typ = 0 czyli równy 1 - jeżeli tak dodaje Role firm w innym przypadku dodaje person w tabeli roles
  8.  
  9. if($data['type'] (IMG:style_emoticons/default/questionmark.gif) 0)
  10. $user->roles()->attach( Role::where('name','firm')->first()->id );
  11. else
  12. $user->roles()->attach( Role::where('name','person')->first()->id );
  13.  


czyli przy każdej rejestracji użytkownika dodaje także do tabeli role_user typ konta (firma / os. fiz) , oraz dodatkowo mam stworzony warunek , który nie działa zgodnie z jego logiką, tzn. sprawdzam czy istnieje w tabeli roles jakieś pola , jeżeli nie to dopisuje 2 rekordy person oraz firm. Problem w tym, że warunek ten działa zawsze bez znaczenia czy ów wartości znajdują się już w tabeli czy też nie.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
casperii
post
Post #2





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


@SmokAnalog odnośnie twojej uwagi:
They are almost the same, but "firm" is often used for legal type businesses. "Company" is more common.

co do kodu :
  1. protected function create(array $data)
  2. {
  3. $user = User::create(
  4. [
  5. 'user' => $data['user'],
  6. 'email' => $data['email'],
  7. 'password' => bcrypt($data['password']),
  8. 'ip' => request()->ip(),
  9. 'key' => Uuid::generate()->string,
  10. ]
  11. );
  12.  
  13.  
  14. if(!Role::where('name','type')->exists())
  15. {
  16. Role::create(['name'=>'person']);
  17. Role::create(['name'=>'firm']);
  18. }
  19.  
  20. //sprawdzamy czy typ = 0 czyli równy 1 - jeżeli tak dodaje Role firm w innym przypadku dodaje person w tabeli roles
  21.  
  22. if($data['type'] (IMG:style_emoticons/default/questionmark.gif) 0)
  23. $user->roles()->attach( Role::where('name','firm')->first()->id );
  24. else
  25. $user->roles()->attach( Role::where('name','person')->first()->id );
  26.  
  27.  
  28. return $user;
  29. }
  30.  
  31.  
  32. public function register(Request $request)
  33. {
  34. $this->validator($request->all())->validate();
  35. $user = $this->create($request->all());
  36.  
  37. event(new Registered($user));
  38. $this->guard()->login($user);
  39. UserVerification::generate($user);
  40. UserVerification::send($user, 'Potwierdzenie rejestracji konta.', env('MAIL_FROM_ADDRESS'), env('APP_NAME'));
  41.  
  42. /* wiadomość znajduje się w isVerified*/
  43.  
  44. return $this->registered($request, $user)
  45. ?: redirect($this->redirectPath());
  46. }


Mam 3 tabele : users , roles, role_user,

users - wiadomo
tabela roles:
id, name
1, person
2, firm

oraz trzecią tabele role_user
user_id, role_id
1, 1
2, 1
3, 2
4, 1
5, 2

czyli zamierzeniem / zabezpieczeniem kodu:
  1. if(!Role::where('name','type')->exists())


powinno być jeśli nie ma danych w tabeli roles , uzupełnij je danymi :
  1. Role::create(['name'=>'person']);
  2. Role::create(['name'=>'firm']);


Niestety każde dodanie nowego użytkownika powoduje, że w tabeli roles dane mi się dopisują tzn:
1, person
2, firm
3, peron
4, firm
5, person
6, firm

itd.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 16:06