Autorius Tema: Awww... Kaip vienu metu galiu būti keliose rolėse?  (Skaityta 1010 kartus)

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Awww... Kaip vienu metu galiu būti keliose rolėse?
« Įrašytas: 2013-02-26 00:10:46 am »
Gan įdomiai gaunasi, localhoste jeigu esu atsijungęs (SESSSION['id'] = 0) man priskiriama tik viena konstanta - iGUEST. Jeigu esu prisjungęs - pagal mano teises priskiria tam tikrą konstantą.
Štai branduolys kaip tai vyksta:
<?php
$my_data 
DB::queryRaw('SELECT * FROM users WHERE id = %i',$_SESSION['id']) -> fetch_assoc();
if(!(isset(
$_SESSION['id']))) {
    
$_SESSION['id'] = 0;
} else {
    
$teises main::decode(substr($my_data['permissions'], 02)); // iš permissions laukelio parenka du pirmus simbolius, kuriuose užkoduota mano teisės - tai viena iš raidžių O, A, B , C, D ar E.
    
define("iREADER",($teises == "E" 0));
    
define("iMEM",($teises == "D" 0));
    
define("iAUTHOR",($teises == "C" 0));
    
define("iMOD",($teises == "B" 0));
    
define("iADMIN",($teises == "A" 0));
    
define("iOWNER",($teises == "O" 0));
}
define("iGUEST",(!iADMIN and !iAUTHOR and !iMEM and !iMOD and !iREADER and !iOWNER 0));
?>

Šis mechanizmas puikiai veikia localhoste, bet svetainėje www.simplomino.blg.lt ...
Index.php pasirašiau štai tokį koduką, atvaizduojantį kokios yra mano teisės bei sesijos id.
<?php
if(iREADER) { echo 'Aš skaitytojas | '; }
if(
iMEM) { echo 'Aš narys | '; }
if(
iAUTHOR) { echo 'Aš autorius | '; }
if(
iMOD) { echo 'Aš moderatorius | '; }
if(
iADMIN) { echo 'Aš Adminas | '; }
if(
iGUEST) { echo 'Aš svečias | ';}
echo 
'SESSION[\'id\'] = '.$_SESSION['id'];
?>
Svetainėje atvaizduoja visas teises, nesvarbu ar svečias aš ar ne.
« Paskutinį kartą keitė: 2013-03-20 12:15:03 pm sukūrė Interneto keleivis »
Guten Tag!

Neprisijungęs Gintas Kovalevskis

  • Dalyvis
  • **
  • Įrašai: 418
  • Karma: +15/-0
    • Žiūrėti profilį
    • Asmeninis portfolio
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #1 Įrašytas: 2013-02-26 07:08:34 am »
Pirmiausiai, tai konstantos yra skirtos visiškai ne tam, gali naudoti ką nors iš globalių kintamųjų, pvz. sesijas, bet ne konstantas,jos skirtos pastoviai ir vienai reikšmei aprašyti. O po to, tai sąlygos sakiniams naudok if elseif...

Nori ir tu tokio paveiksliuko? Apsilankyk FeedMage puslapyje

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #2 Įrašytas: 2013-02-26 10:07:39 am »
parodykit pavyzdį kaip su kintamaisiais atpažinti kas tu toks esi? Ar tu svečias, ar tu narys, ar tu adminas?
Guten Tag!

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 2005
  • Karma: +56/-16
    • Žiūrėti profilį
    • Apie mane
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #3 Įrašytas: 2013-02-26 11:39:10 am »
Keleivi, juk minėjo sesijas, tai pvz:
$_SESSION['role'] ir čia saugai rolę....

O define tam negali naudoti...

Manualai.lt Forumas

Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #3 Įrašytas: 2013-02-26 11:39:10 am »

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #4 Įrašytas: 2013-02-26 12:02:34 pm »
Pasidariau su sesijom, kol kas patestavimui šitaip:
Tiesa daug rašymo
<?php
if(!(isset($_SESSION['id']))) {
    
$_SESSION['guest'] = TRUE;
    
$_SESSION['reader'] = FALSE;
    
$_SESSION['memb'] = FALSE;
    
$_SESSION['author'] = FALSE;
    
$_SESSION['admin'] = FALSE;
    
$_SESSION['owner'] = FALSE;
} else {
    
$_SESSION['guest'] = FALSE;
    
$_SESSION['reader'] = TRUE;
    
$_SESSION['memb'] = TRUE;
    
$_SESSION['author'] = TRUE;
    
$_SESSION['admin'] = TRUE;
    
$_SESSION['owner'] = TRUE;
    
}
Ir panaikinau sesiją 'id' svečiuitaip daug geriaunegukad nustatyta 0 ir po to dar nustatinėk nesąmones visokias.
?>
« Paskutinį kartą keitė: 2013-02-26 12:07:07 pm sukūrė Interneto keleivis »
Guten Tag!

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 2005
  • Karma: +56/-16
    • Žiūrėti profilį
    • Apie mane
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #5 Įrašytas: 2013-02-26 13:37:49 pm »
Nu vistiek durnai darai...
Padarai vieną sesiją su ROLE, ten dedi skaičių nuo 0 iki kiek tau reikia. Kiekvienas skaičius reiškia kokią nors rolę ir baigta :)

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #6 Įrašytas: 2013-02-26 20:16:10 pm »
Na štai pasidariau, viskas veikia, perfect.
<?php
if(isset($_SESSION['id'])) {
    
$my_data DB::queryRaw('SELECT * FROM users WHERE id = %i',$_SESSION['id']) -> fetch_assoc();
    
$teises main::decode(substr($my_data['permissions'], 02));
    switch(
$teises) {
        case 
"O"// owner
            
$_SESSION['role'] = 1;
            break;
        case 
"A"// administrator
            
$_SESSION['role'] = 2;
            break;
        case 
"B"// moderator
            
$_SESSION['role'] = 3;
            break;
        case 
"C"// author
            
$_SESSION['role'] = 4;
            break;
        case 
"D"// member
            
$_SESSION['role'] = 5;
            break;
        case 
"E"// reader
            
$_SESSION['role'] = 6;
            break;
        
    }
}
else {
    
$_SESSION['role'] = 0// guest
}
?>
Guten Tag!

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #7 Įrašytas: 2013-02-26 20:39:34 pm »
siulau rasyti suprantama koda ir nenaudoti tokiu visokiu "id" rolei nusakyti. tiesigo

$_SESSION['role'] = 'admin';

ir viskas
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #8 Įrašytas: 2013-02-26 21:25:21 pm »
a man gerai ir taip. 1, 2 - adminai, 0 - svečias. taigi if($_session['role'] !== 0) { // as prisijungęs } else { /rg } daug man tu visokiu roliu neprireiks jugi :).
Guten Tag!

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #9 Įrašytas: 2013-02-26 21:33:54 pm »
a man gerai ir taip. 1, 2 - adminai, 0 - svečias. taigi if($_session['role'] !== 0) { // as prisijungęs } else { /rg } daug man tu visokiu roliu neprireiks jugi :).

tiesiog ne su numeriais roles butu labiau lengvai skaitomos ar kaip lietuviskai pasakyti.. more readable and human friendly..
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 2005
  • Karma: +56/-16
    • Žiūrėti profilį
    • Apie mane
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #10 Įrašytas: 2013-02-26 21:59:11 pm »
a man gerai ir taip. 1, 2 - adminai, 0 - svečias. taigi if($_session['role'] !== 0) { // as prisijungęs } else { /rg } daug man tu visokiu roliu neprireiks jugi :).

tiesiog ne su numeriais roles butu labiau lengvai skaitomos ar kaip lietuviskai pasakyti.. more readable and human friendly..

Iš tikro, jei protinga dokumentacija būtų - galima ir taip :)

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #11 Įrašytas: 2013-02-26 23:55:18 pm »
Lukai, aš darau taip kaip man ir sistemai patogiau, o ne dėl jūsų. Aš nekuriu universalios, nemokamos turinio valdymo sistemos, kad turėčiau būt įpareigotas rašyti human friendly pavadinimus, tuos skaičiukus aš mintinai žinau, tad problemų neturiu :)
Guten Tag!

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #12 Įrašytas: 2013-02-27 02:18:08 am »
Lukai, aš darau taip kaip man ir sistemai patogiau, o ne dėl jūsų. Aš nekuriu universalios, nemokamos turinio valdymo sistemos, kad turėčiau būt įpareigotas rašyti human friendly pavadinimus, tuos skaičiukus aš mintinai žinau, tad problemų neturiu :)

paziurek i ta savo koda po savaite, o po menesio? o jei to kodo parasysi ne 100 eiluciu, bet 10  000 ir visur nenaudosi human friendly vardu? Kodas turi buti skaitomas lengvai, nesvarbu kam rasai duotuoju momentu ar sau ar kitiems. Jis turi buti lengvai skaitomas, o kur neina is kodo tiesiogiai suprasti lengvai kas vyksta, nieko nezinant apie programa, tai turi buti bent menkiausias komentaras. Siulau iprasti tai daryti, labai naudingas ir gerbtinas iprotis
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #13 Įrašytas: 2013-02-27 10:14:14 am »
Lukas teisus, kad reikia readable kodą rašyt. Bet tikrai ne 'admin' ar ten 'supermoderator' ir pan. :) tam juk yra define'ai.
<?php
define
('GUEST'0);
define('ADMIN'1);
define('SUPER_ADMIN'2);

// ..........
$_SESSION['role'] = $access;
// ....

if ($_SESSION['role'] < ADMIN) {
   
// veiksmai ne adminui
}

if (
$_SESSION['role'] >= SUPER_ADMIN) {
  
// veiksmai super adminui
}

// ir pan.

?>

Yra tokia taisyklė. Jeigu skaičius arba koks nors string'as kode pasikartoja daugiau negu 1 kartą ir yra su ta pačia logine prasme, jį reikia padaryt konstanta (arba define'u).

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #14 Įrašytas: 2013-02-27 10:20:43 am »
Lukas teisus, kad reikia readable kodą rašyt. Bet tikrai ne 'admin' ar ten 'supermoderator' ir pan. :) tam juk yra define'ai.
<?php
define
('GUEST'0);
define('ADMIN'1);
define('SUPER_ADMIN'2);

// ..........
$_SESSION['role'] = $access;
// ....

if ($_SESSION['role'] < ADMIN) {
   
// veiksmai ne adminui
}

if (
$_SESSION['role'] >= SUPER_ADMIN) {
  
// veiksmai super adminui
}

// ir pan.

?>

Yra tokia taisyklė. Jeigu skaičius arba koks nors string'as kode pasikartoja daugiau negu 1 kartą ir yra su ta pačia logine prasme, jį reikia padaryt konstanta (arba define'u).

teisingas pastebejimas ;)
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #15 Įrašytas: 2013-02-27 11:28:37 am »
Nagi nagi, tai kas čia dabar prieštarauja, tai reikia kurti konstantas, tai nereikia kurti konstantų. Jūs biški apsispręskit ;) Bet  dėl konstantų aš sutinku, keletą turėti nepakenktų.
Guten Tag!

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #16 Įrašytas: 2013-02-27 11:31:23 am »
Nagi nagi, tai kas čia dabar prieštarauja, tai reikia kurti konstantas, tai nereikia kurti konstantų. Jūs biški apsispręskit ;) Bet  dėl konstantų aš sutinku, keletą turėti nepakenktų.

pasiziurek atidziau i pries tai buvusi koda ir sita, logine prasme skiriasi konstantu vartojimo
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #17 Įrašytas: 2013-02-27 12:24:36 pm »
Taip.. Žinot, vakar pasidariau tokią funkciją, panašią kaip jūs čia nurodėt konstantas: esmė ta, kad man nereikėtų rašyti if(// aš admin or // aš superadminas), paprasčiausia funkciją iADM(), jei gražina true, puiku, jei ne, puslapis neprieinamas :D
<?php
public static function iADM() {
            if(
$_SESSION['role'] == or $_SESSION['role'] == 2) {
                return 
TRUE;
            } else { return 
FALSE; }
        }
?>

Guten Tag!

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #18 Įrašytas: 2013-02-28 10:01:06 am »
1 dalykas. Su konstantom galėtum padaryti tiesiog if ($role >= ADMIN).
2 dalykas. Jei jau nori tokios funkcijos, tai ji gali atrodyti paprasčiau. Pvz taip:
<?php
public static function iADM() {
    return (
$_SESSION['role'] == or $_SESSION['role'] == 2);
}
?>

BlaST
Serveriai.lt paslaugos su 50% nuolaida!
Blast.lt blogas

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #19 Įrašytas: 2013-02-28 12:34:48 pm »
o ką gražins? skaičių 1 ar 2, ar true/false? Aš tokių subtilybių nelabai žinau, darau senamadiškai :D
Guten Tag!

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #20 Įrašytas: 2013-02-28 13:04:51 pm »
Nu ką programavimo kalboje gražina operatorius ==? Kodėl jis naudojamas sąlygose, kodėl sąlygoje negali naudoti vieno =? Siūlau pasiskaityti bendrą programavimo logikos literatūrą, nes pastebėjau, kad nežinant pagrindų žmonės bando lipti į viršunę :)
BlaST
Serveriai.lt paslaugos su 50% nuolaida!
Blast.lt blogas

Manualai.lt Forumas

Ats: Awww... Kaip vienu metu galiu būti keliose rolėse?
« Atsakymas #20 Įrašytas: 2013-02-28 13:04:51 pm »