Diskuze: MCV a rovnaká url, ale iné zobrazenie pre užívateľa, admina, ...

PHP PHP MCV a rovnaká url, ale iné zobrazenie pre užívateľa, admina, ... American English version English version

Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Matúš Petrofčík:

Dobré ránko kolegovia.
Vopred poprosím, aby mi neodpovedali ľudia čo sa tomu nevyznajú, alebo si nie sú istí svojou odpoveďou. Za všetky odpovede aj otázky na spresnenie ďakujem. :)

Ide o jeden projekt (v budúcnosti viac s podobnou fičúrou), ktorý nechcem robiť cez žiadne frameworky alebo pripravené CMS. Chcem si to napísať sám, a hlavne kvalitne. Opieram sa o tunajšie tutoriály, devbook ukážkové MCV cmsko, a o svoju vynaliezavosť. Pri navrhovaní všetkého možného som sa dostal k menšiemu problému, s ktorým by som sa rád poradil:

Potrebujem, aby sa stránka zobrazovala všetkým typom užívateľov (neprihláseným, prihláseným, redaktorom, adminom) pod rovnakou URL, ale s menšími zmenami. Tj.: každý by mal podľa typu užívateľa obmedzené/pridané funkcie a zobrazenie stránky. Nechcem to riešiť spôsobom, že sa ľudia budú prihlasovať cez nejaké administračné rozhranie.

Zaujímam sa teda o nejaké riešenie návrhu tried, kontrolerov, ako týchto užívateľov rozlíšiť a pritom toto rozlíšenie riešiť čo najelegantnejšou cestou. Nechcem riešiť zisťovanie práv uživateľa v každej triede samostatne.

Ak máte nejaké nápady, otázky, návrhove vzory (alebo ich kombinácie), ... ďakujem ak prispejete :)

matusko

Odpovědět 5.5.2014 2:16
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Matúš Petrofčík:

to mi nikto nevie pomôcť? alebo som snáď zadal zle otázku? :/

Nahoru Odpovědět 5.5.2014 23:38
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Michal Štěpánek:

A jak chceš u nepřihlášených uživatelů řešit jejich oprávnění??? To je přece postavené na hlavu. Když nebudu přihlášen, jsem tedy anonym a žádný program mi nemůže nabídnout jiná oprávnění než jinému anonymovi, protože nás nezná...
Musí být nějaká databáze uživatelů, databáze rolí a uživatelé musí být přiřazování do rolí. Podle toho pak různým uživatelům můžeš zobrazit to, co mají vidět, resp. co má vidět ta role...

Editováno 6.5.2014 10:50
Nahoru Odpovědět  -2 6.5.2014 10:47
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Michal Štěpánek
Matúš Petrofčík:

Databázu mi tu riešiť netreba.

Zoberiem si ako príklad devbook:
A: anonym - môže prezerať články a komentáre
B: člen - môže to isté čo anonym + pridávať komentáre, hodnotiť články, 1++, posielať správy
C: moderátor - môže to isté čo člen + zamykať forum, mazat komentáre,
atď...

A ja chcem vedieť, ako to v OOP PHP vyriešiť. Či to mám riešiť v každej triede znovu a znovu, alebo pre každého užívateľa vlastnú triedu, alebo ako? Aby riešenie bolo čo najprehľadnejšie, najelegantnejšie a najľahšie na úpravu.

Nahoru Odpovědět 6.5.2014 11:31
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Jan Vargovský:

Koukni na nějaký finální projekt, kde se řeší přihlášený/ nepřihlášený - tam snad najdeš odpověď.

V podstatě si uděláš kompletní view a u jednotlivých věcí se ptáš, jestli se mají vyrenderovat nebo ne.

Editováno 6.5.2014 11:57
 
Nahoru Odpovědět 6.5.2014 11:55
Avatar
Odpovídá na Matúš Petrofčík
Michal Štěpánek:

Samozřejmě, že to nemusí být rovnou v databázi, ale bez přihlášení to nelze...
i na Devbook se musíš přihlásit, abys mohl požívat výhody "člena"...

Nahoru Odpovědět 6.5.2014 12:48
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Jan Vargovský
Matúš Petrofčík:

ja by to rád kontroloval na jednom mieste a hlavne aby mi nevznikal chaos :) nejaký tip na ten projekt z ktorého by som mohol odkukať? pokial nikto nevie lepšie riešenie, tak si na začiatku skontrolujem aký užívateľ chce zobraziť stránku a podľa toho mu pošlem napr.: AnonymKategori­eKontroler alebo Administrator­KategorieKontro­ler, a aby som si ich udržal s rovnakými metodami tak budu dediť od nejakého spoločného abstraktného UzivatelKontroleru (to bol príklad)

Michal Štěpánek : ee uchádza ti zmysel toho čo chcem

Nahoru Odpovědět 6.5.2014 12:58
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Jiří Gracík:

Já bych si napsal kontrolery pro každý případ - jak jsi psal teď.

Nahoru Odpovědět  +1 6.5.2014 13:09
Creating websites is awesome till you see the result in another browser ...
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jiří Gracík
Jan Vargovský:

Zbytečně moc redundantní.

http://stackoverflow.com/a/11668462
 
Nahoru Odpovědět 6.5.2014 14:00
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Jan Vargovský
Matúš Petrofčík:

z wikipedie, trochu offtopic k slovu "redundantní":

  1. Redundance jako zbytečnost, plýtvání slovy a prostředky. Redundantní je příslovečné „páté kolo u vozu“.
  2. V jazyce, v komunikaci, v informatice i v technice je však redundance důležitá jako prostředek ke zvyšování spolehlivosti a odolnosti proti chybám.
Nahoru Odpovědět 6.5.2014 14:26
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Jan Vargovský:

V programování = kód, který je na více místech a v podstatě se neliší. Ani tvoje HTML se lišit nebude, jen někdo tam bude mít navíc tlačítko a někdo zase ne, takže ti stačí jeden view a budeš ho tam dávat na základě toho pro koho se ten view generuje.

 
Nahoru Odpovědět 6.5.2014 15:24
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Jan Vargovský
Jiří Gracík:

Pokud tam bude mít administrátor nějaké ovládací prvky a výpisy z db navíc, tak je zbytečné je volat i pro nepřihlášeného a pak je nevypsat, ne :)?

Nahoru Odpovědět 6.5.2014 17:20
Creating websites is awesome till you see the result in another browser ...
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Jiří Gracík
Jan Vargovský:

Oni se volat nebudou, copak když máš konstrukci

if(true)
write(smth);
else
write(smth2);

tak se taky nevolají obadva, ale jen ten jeden, tak sámo to funguje i tam. Akorát tam máš teda jednu alternativu navíc.

 
Nahoru Odpovědět  +1 6.5.2014 17:27
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Jan Vargovský
Jiří Gracík:

Jooo ... tak tomu nerozumím :D

Nahoru Odpovědět 6.5.2014 18:23
Creating websites is awesome till you see the result in another browser ...
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Jan Vargovský
Matúš Petrofčík:

to mám teda všade v každej triede ifovať? lenže ja budem mať 5 rôznych oprávnení a takto mi to moc nevyhovuje :/

Nahoru Odpovědět 6.5.2014 19:19
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Jan Vargovský:

Podle vašeho bys to dělal 5x celé, takhle tam akorát uděláš pár podmínek :D

Se kdyžtak poptej někde, kde se na ASP zaměřují.

 
Nahoru Odpovědět 6.5.2014 19:34
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Jan Vargovský
Matúš Petrofčík:

php chlape! :D ešte je to k tomu v php sekcii fóra :D

Nahoru Odpovědět 6.5.2014 20:10
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Jan Vargovský:

Fuu, to jsem si nevšiml :D tak to neber nic co jsem napsal neplatí :` omlouvám se 8|

 
Nahoru Odpovědět 6.5.2014 20:24
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Nahoru Odpovědět 6.5.2014 20:26
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Petr Nymsa:

Já bych to asi řešil následovně

  1. (Model) Správce uživatelů kde bych měl aktuálně přihlášeného uživatele a ENUM (nějaký flag) jeho práv
  2. V Controleru si pak vytáhnu jaký má práva
  3. Ve View akorát podmínky jestli splňuje požadavky

-> To je podlě mě nejjednodušší cesta

if($this->user->credentials == "Admin")
 <a href="adminsekce" />
else
 ....
Editováno 6.5.2014 20:39
Nahoru Odpovědět  +1 6.5.2014 20:38
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Petr Nymsa
Jiří Gracík:

Kdyby šlo jen o odkaz tak proč ne, ale kdyby třeba admin měl navíc po straně panel s výpisem nejnovějších komentů na schválení (příklad), tak bych to takhle nedělal(zbytečné dotazy na db a plácání výkonem). Jak bys to udělal v tomhle případě?

Nahoru Odpovědět 6.5.2014 20:42
Creating websites is awesome till you see the result in another browser ...
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Jiří Gracík
Petr Nymsa:

No tak hlavně předpokládám, že když jsem na výpisu článku nebudu tam adminovi cpát ještě nejnovější komentáře. To by měl už v ADMIN sekci.

Když to shrnu na komentáře tka těch podmínek moc nebude. Adminovi zobrazíš pár tlačítek navíc. Ostatní složitější administrace bude někde v Admin sekci. Tipuju že devbook to má stejně :)

Nahoru Odpovědět 6.5.2014 20:55
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 22 zpráv z 22.