Web dev soyutlama tüm katmanları aynı mantıksal sonucu erişmek gerekir

2 Cevap php

Ben bir web sitesi tasarlama ve birisi oturum açtığında, bunlar Özellikle içeri konum ne grup bilmek gerek onlar {olup olmadığını, zaman zaman orada oturum açmak için yeteneğine sahiptir [(0)] } grup. Şu anda, id kullanıcı kimlik numarası olan bir MySQL saklı yordam BOOL is_officer(INT id), var.

Benim soru: akıllıca benim kütüphanede bir PHP işlevi yapmak için mi (bool) is_officer(), $_SESSION['id'] kullanır ve MySQL saklı yordam çağrıları?

Sonra, sırayla (güvensiz) kullanıcı bir subay olup olmadığını bilmek durumda ben gereken, MySQL saklı yordam diyebileceğim PHP işlevini çağırır bir sayfa /ajax/is_officer.php, yapmak akıllıca olacaktır on-the-fly?

(Son is_officer.php için bir AJAX isteği göndermek istiyorsunuz bir JS fonksiyonu is_officer() yapmak olacaktır).

tl; dr: aynı işlev adı birçok dilde, bir başka, daha yakın ve veritabanına yakın aramaları - iyi fikir ya da kötü bir fikir?

Ben temelde burada rehberlik için soruyorum - ortak bir yay / nay oy tür. Bu size geçmişte gördük herhangi bir tasarım desenleri uyuyor mu?

2 Cevap

Bu yol çok olması için bir işlev uzman gibi görünüyor. Bu yaklaşım ile, sonunda her bilgi önemsiz bit için çeşitli seviyelerde işlevleri kümesi birikir olacak. Ayrıca, veritabanına bir gidiş dönüş yaparak hızlı bir şekilde çok savurgan olabilir.

Ben bir oturumda kullanıcı giriş ilgili bilgileri depolamak için tercih ediyorum. Bu satırlar boyunca bir şey:

if (/* user logged in successfully */) {
    $user = $Db->getUserInfo($id);
    // $user = array('id' => 1, 'name' => 'Foo', 'officer' => true, ...)
    $_SESSION['user'] = $user;
}

Eğer kullanıcı bir subay olup olmadığını bilmek gerekir ve ne zaman, sadece $_SESSION['user']['officer'] için kontrol edin.

Başarılı giriş yaptıktan web sayfasına is_officer değerini göndermek ve orada bir çerez ayarlayabilirsiniz. Bu şekilde bir sunucu çağrıma Eğer kullanıcı memuru olup olmadığını kontrol etmek istiyorsanız her zaman yapmak zorunda değilsiniz.

Sadece kullanıcı memuru olup olmadığını dayalı (UI değişiklikler gibi) istemci tarafı özelleştirmeleri yapmak için bu çerez değeri kullanın; bir istek sunucuya geldiğinde, istek php / mysql-saklı yordam kullanarak bir polisin aslında olduğunu teyit yok. Istemciden gönderilen verileri asla güvenme - manipüle edilebilir.