Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zrobic cos takiego bo nie mam pomyslu
Forum PHP.pl > Forum > PHP
makay
Jak zrobic cos takiego , ze przy rejestracji uzytkownik podaje z jakich serwisow bedzie kozystal (powiedzmy jest 5 serwisow on zaznacza 3 )
Po rejestracji uzytkownik ma dostep tylko do tych serwisow ktore wybral di nnnych nie .
Jak to zrobic , proste autoryzacje dla grup juz umiem robic ale taka zamotana , gdzie mozliwe jest tyle kombinacji nie jest mozliwe do zrobienia technikami ktore ja umiem sad.gif
Help plizz
DreeD
jak dla mnie to to sie troche mija z celem... po co blokowac komus dostep do danego dzialu skoro moze przy rejestracji wybrac sobie odpowiedni... kazdy wybiera wszystkie 5 i co? :?
kszychu
Uprawnienia do serwisów przechowuj jako liczbę, np:
masz pięć serwisów i teraz kilka sytuacji:
1. Uzytkownik ma dostęp do wszystkich (11111) 31
2. Nie ma dostepu do zadnego (00000) 0
3. Ma dostęp do pierwszego i ostatniego (10001) 17

A pozniej juz tylko robisz and na uprawnieniach uzytkownika i uprawnieniach wymaganych do wejścia do danego serwisu
if($user->uprawnienia & $serwis->uprawnienia == $serwis->uprawnienia) to wpuszczasz

Jasne?
spenalzo
http://forum.php.pl/viewtopic.php?t=8182
stach
Skoro znowu wrocilo do tego przedstawie swoj sposob, choc poczesci jest on poprostu rozbudowaniem ideii kszycha.

Ja mialem problem z tym iz moj "string" z uprawnieniami zaczynal sie rozrazstac i to azzanadto, co poporstu przestalo wygladac estetycznie (moze i to nie ma znaczenia dla skryptu ale dla mnie mialo smile.gif ), wiec rozwiazalem ten problem w taki sposob :

[php:1:7efe5e51b2]<?php
// Konwersja uprawnien bin do dec dluzszych niz 31 bitow.
// by stach : stach@stach.one.pl
// ver. 1.1.0

$upr_bin =
'11111110110001110101111111011111111111011000111010111111101111111111101111011011
11011011110111';

class upr_do {
var $bit = 16;
var $zacznij = 0;
var $koniec = false;


function upr_do($upr_bin) {
$this->co_ile = $this->bit;
$this->upr_bin = $upr_bin;
$this->podziel($this->koniec);
}

function podziel($koniec) {
for($i=$this->zacznij; $i<$this->co_ile; $i++) {
$this->_temp .= $this->upr_bin[$i];
}
$this->zapisz($koniec);
}

function zapisz($koniec) {
$this->resultat .= ((strlen($this->_temp) != $this->bit) ? (bindec(str_pad($this->_temp,$this->bit,'0'))) : (bindec($this->_temp))) . ($przecinek = ($koniec == false) ? ('|') : (''));
unset($this->_temp);
if($koniec == true) {
end;
}
else {
$this->zacznij = $this->co_ile;
$this->co_ile = $this->co_ile + $this->bit;
if($this->co_ile >= strlen($this->upr_bin)) {
$this->co_ile = $this->zacznij + ($this->bit - ($this->co_ile - strlen($this->upr_bin)));
$this->koniec = true;
}
$this->podziel($this->koniec);
}
}
}


class upr_get extends upr_do{
function upr_get($upr_dec) {
$this->upr_dec = $upr_dec;
$this->explode_upr($this->upr_dec);
$this->upr_decbin($this->upr_dec);
}

function explode_upr($upr_dec) {
$this->upr_dec = explode('|', $upr_dec);
}

function upr_decbin($upr_dec) {
foreach($upr_dec as $_temp) {
$this->resultat .= ((count(decbin($_temp)) != $this->bit) ? (str_pad(decbin($_temp),$this->bit,'0',STR_PAD_LEFT)) : (decbin($_temp)));
}
}
}

echo '<p>Uprawnienia efektywne: <p>'. $upr_bin;
$upr_dec = new upr_do($upr_bin);
echo '<p>Uprawnienia zapis: <p>'. $upr_dec->resultat;
$upr_bin = new upr_get($upr_dec->resultat);
echo '<p>Uprawnienia efektywne konwersja z zapisu: <p>' .$upr_bin->resultat;
?>[/php:1:7efe5e51b2]
Niewiem czy to ma jakis sens robienie tego w ten sposob czy nie, ale zawsze to mniej miejsca zawalone w rekordzie smile.gif
switch
Jeżeli chcesz oprzeć zbieranie użytkowników o bazę danych, to problem jest banalny. Tworzysz w bazie te 5 dodatkowych pól z nazwami działów do ,których chcesz dopuścić. Jak rejestrujący zaznaczy wybrane pole to podczas tworzenia jego konta w bazie zapisze się w tym polu np YES a te, które nie zazanczy będą NO. Teraz jak się będzie logował, to system go puści do tych działów gdzie ma w bazie danych zapisane YES przy rejestracji. I tyle
bumelang
A nie prościej po prostu zrobić tabelę
[sql:1:751a9410cb]CREATE TABLE uprawnienia (
id_uzytkownika INTEGER,
id_sekcji INTEGER
);[/sql:1:751a9410cb]
Może prościej, to za dużo powiedziane, ale na pewno dużo bardziej rozsądnie pod kątem dalszej rozbudowy. Można też robić wiele różnych ciekawych rzeczy, np. id_uzytkownika zastąpić id_grupy, itp.
stach
Cytat
Może prościej, to za dużo powiedziane, ale na pewno dużo bardziej rozsądnie pod kątem dalszej rozbudowy. Można też robić wiele różnych ciekawych rzeczy, np. id_uzytkownika zastąpić id_grupy, itp.


Wszystko i tak w sumie zalezy od tego czy potem z 5 zezwolen nie zrobi Ci sie 100. Napoczatku mojego projectu myslalem ze zezwolenia do samych dzialow wystarcza, ale potem okazalo sie ze trzeba zrobic zezwolenia do podzialow a na koncu ze jeszcze odzielne dla kazdej funkcji podzialu. Ostatecznie uprawnienia do samych dzialow odpadly smile.gif Lepiej odrazu zrobic cos co bedzie dzialac na duza ilosc niz robic 3x ta sama funkcje. I know lenistwo potrafi duzo nauczyc biggrin.gif (Ale tez terminy czasowe).
switch
To może jeszcze inaczej i dalej idąc tropem "YES, NO", zrobić dla każdego użytkownika dwa pola w bazie danych. W polu YES będa się zapisywac wszystkie działy do których będzie mial dostęp a w polu NO, do których nie ma. Masz wtedy luksus, że nawet jeżeli tych działów przybędzie mechanizm nie bedzie musial być zmieniany. Potem przez pętlę sprawdzisz, z których działów może korzystac po logowaniu i sledząc go na kazdej stronie wpuszczasz do poszczególnych działów. Może kombinuj w tym kierunku... Wtedy przy rejestracji działy, ktore zaznaczy zapiszą się w polu YES a te, które będą niezaznaczone w polu NO.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.