Benutzerauthentifikation nach 1.0.6

Hallo Zusammen,

ich hab seit ich auf Version 1.0.6 upgedatet habe ein Problem mit der benutzerauthentifikation. Ich habe mit dem yiic tool über die Console eine datenbankbasierte Benutzerauthentifikation mit einem Rollenkonzept (AuthAssignment, AuthItem und AuthItemChild) aufgebaut. Seit ich auf Version 1.0.6 upgedatet habe geht das aber nicht mehr so richtig. Ich habe drei Arten von Benutzern angelegt, den systemadministrator, testadministrator und den testteilnehmer. Wenn ich mit mit ienem Benutzer anmelde der systemadministratorrechte hat wird dieser auf testadministratorrechte heruntergestuft, keine ahnung wieso. Die Auth-Tabellen sind meines Erachtens ja völlig frei von den anderen Tabellen und nur mit der usrid mit der anderen Tabelle verbunden, ich hab da zwar jetzt eine Relation zwischen den Tabellen eingetragen aber gebracht hat das auch alles nichts, gleiches verhalten. Ich hab irgendwie die vermutung das das was mit der checkAccess Methode zu tun hat, mehr kann ich dazu, aus unwissenheit, leider nicht sagen.

Ich nutze eigentlich die Benutzerauthentifikation wie sie von anfang an ist mit den Änderungen wie sie auch in der Blog Demo verwendet werden. Meine Benutzertabelle heißt halt Benutzer und meine userid ist die idBenutzer aber das dürfte ja eigentlich keine rolle spielen da ja die Yii::app()->user->getId() id verglichen wird und ich die ja bei der authentifizierung so festlege das diese die idBenutzer ist. Wenn ich die id mit getId() ausgebe ist es auch die des benutzers.

Ich hoffe ihr könnt mir helfen.

hast du schon eine lösung dafür? mich hält dieser kommentar gerade davon ab, auf 1.06 upzudaten!

Ne leider nicht. Aber du kannst ja den framework ordner vom 1.0.5 sichern oder umbennenen und bei dir mal ausprobieren ob es bei dir geht oder nicht. Wenn nicht einfach wieder das alte framework nehmen, das geht ja. Wenn du das selbe problem hast vielleicht findest du ja ne lösung.

So, hab das problem jetzt gefunden. erstmal entwarnung, ihr könnt theoretisch problemlos updaten, hab ich jetzt auch. Das problem was bzw. ist ein programmierfehler meinerseits gewesen. irgendwie ruft das framework die afterSave Methode auf nachdem ein objekt erstellt worden ist. Da ich da mit den authmanager methoden was mache hats mir da alles immer zerlegt. nachdem ich das auskommentiert habe gehts jetzt wieder einwandfrei, bis auf das das ich an meinen benutzern nichts ändern kann aber das muss ich halt ändern :smiley:

Grüße

Martin

So, mir fällt gerade auf das eigentlich jeder zweite Beitrag von mit mit so beginnt, egal, also ich hab jetzt komplett ergründet wieso ich so Probleme hatte mit dem 1.0.6er Update.

Und zwar habe ich Zustandsinformationen wie die Rechte oder sowas wie Entwurf/Offen/Geschlossen oder was auch immer, als TinyInts in der Datenbank gespeichert. Bei 1.0.6 ist aber ein neuer Typ von Feld oder was auch immer hinzugekommen und zwar Boolean. Das Framework interpretiert alle Tinyint spalten aus der Datenbank als als Booleanwerte. Benutzer die das Recht 2 also Administrator hatten gab es dadurch nicht mehr da das Feld zwar die Werte alle so in das Objekt übernommen hat also als 2 aber interne das Framework das eben zu ner 1 gemacht hat. Nachdem ich mir die Modelle neu generiert habe (Datenbankneustart nach dem Tabellenändern nicht vergessen) geht alles wieder einwandfrei, jetzt halt als vollwertiger Int-Wert :smiley:

Hoffe das euch das Hilft falls noch jemand das oder ein ähnliches Problem hat. Ist halt, mit dem Post zuvor, einiges zusammengekommen was alles insgesamt dazu beigetragen hat das nix mehr ging, jetzt läufts allerdings wieder :smiley:

Grüße

Martin

Interessant. Ich glaub, dass nur TINYINT(1)  (also "1-stellige ganze Zahl") als boolean interpretiert werden. "Volle" TINYINT(3) sollten schon so bleiben, sonst könnte man Tinyints ja gar nicht mehr verwenden.

Hab grad keine Zeit, das zu testen, aber falls du das zufällig probierst, könntest kurz davon berichten ;)

hi,

also ich glaube das ist generell bei tinyint so weil ich hatte auch welche die TINYINT(2) waren und hab zum testen auch mal umgestellt auf >1 und es hat sich nichts geändert. Das könnte natürlich auch damit zusammen hängen das ich die modelle neu hab generieren müssen aber normal hätte es gehen sollen tat es aber nicht.

Ich habe es zwar nicht explizit ausprobiert, aber normalerweise dürfte nur tinyint(1) als boolean erkannt werden.

Auszug aus CMySqlColumnSchema.php:

protected function extractType($dbType)


{


   ...


	else if(strpos($dbType,'bool')!==false || $dbType==='tinyint(1)')


		$this->type='boolean';


   ...


}

Gruß