kullanıcı giriş değilse nasıl bir PHP sınıfı başlatma büstü dışarı edebilir?

3 Cevap php

Ben CodeIgniter kullanarak bir sitede bir admin bölümü yazıyorum. Ben Controller sınıfını genişleten bir Admin sınıf yazıyorum, ve sonra yönetici sayfalarıyla denetleyicileri uzatacaktır Admin. Giriş sayfasını göstermek ve sınıf başlatma iptal etmek için, ve eğer - Ben Admin class emin o kaydedilir yapmak için kullanıcının oturumunu kontrol etmek istiyorum çünkü bunu.

Benim için, bu güzel bir soyutlama gibi görünüyor - sadece onları yazma ve bu konuda süper sınıf endişe icar, yönetim sayfaları ve fonksiyonları herhangi biri için oturum açılmadan kullanıcı endişesi değil. Ama bu nasıl yapmalıyım?

Ben Admin yapıcısı bir istisna ise, bu alt sınıf oluşturulan onu uzanan durduracak? Bunu yapmak için daha iyi bir yolu var mı? @ Daha önce MVC kullanılmış olan herkes, daha önce böyle bir şey ile ele alınmıştır?

3 Cevap

show_error () kelime benzer yerli PHP () ölmek. Bu derhal durdurulması ve hata dize, deniyor olursa olsun görüntüler: bir görünüm, bir model, ya da (daha yaygın) bir denetleyici. Çağrısına kadar oluşur herhangi bir devlet manipülasyon tersine olmayacağını da aklınızda bulundurun.

Hakları denetimi yapmak için en iyi uygulama olarak, burada diğer millet ve diğer çözümler tavsiye eder, ama sana ben genellikle almak yaklaşım verebilir.

Yönetici olmayan birden fazla admin kullanıcıları ile bir sitede sadece olmayan başka bir abone anlayışlı son kullanıcı olacak, ben sadece kullanıcıların veritabanı tablosundaki bir bayrak yaratacak ve kullanıcının satır özel bir denetleyici {[(yüklenir 0)]}. Farklı fonksiyonlar farklı haklar kısıtlamalar varsa Sonra, ben sadece bir kontrolör sınıfta her fonksiyonu üzerinde bir kontrol eklemek istiyorum. Hepsi aynı haklara kısıtlamalar varsa anlaşılacağı Lukman @ gibi, ben, denetleyicisi koymak istiyorum.

Admin kullanıcı deneyimi tamamen ayrı olacak ise, bir yönetici alt etki alanı oluşturma ve üzerinde CI yüklemeyi düşünebilirsiniz. Bu şekilde haklarını yöneten küresel bir özel denetleyicisi kurmak başka bir şey hakkında endişelenmenize gerek yok.

Senin durumunda, ben alırdım yaklaşım biraz farklı. Ben özel bir denetleyicisi oluşturmak ve (orada hemen hemen her zaman iyi bir yerde yapılır eşyalarını rüzgarlar beri bu bence sadece iyi bir uygulamadır) ondan sitede HER denetleyicisi uzatmak istiyorum. Bu kontrolör, ben aday olacağını:

if(strcasecmp($this->uri->segment(1) , 'admin') === 0)
    if($this->session->userdata('admin') !== 1)
        show_error('Access Prohibited');

Kullanıcı oturum eğer Yönetici sınıfının yapıcısı olarak, kontrol ve giriş sayfasına değilse yönlendirebilirsiniz.

public function __construct() {
  // assuming you have your user authentication handled by UserLogin class
  if (!UserLogin::is_logged_in()) {
    redirect("/uri/to/login/page");
    die;
  }

  // do normal stuff
  parent::__construct();
}

Burada "bir" testi uygulamak öneririz. "A (n) mı" bir kontrolör Admin? Ben hayır derim. Aksine, idari sayfalara erişim sağlayan bir denetleyici özellik "admin kimlik doğrulaması gerektiriyor" olabilir. Eğer erişim denetimi yapmak için controller sınıfının bir dekoratör kullanmak gerekir gibi Dolayısıyla, öyle görünüyor. Admin bölümleri için bir "Yönetici erişim denetleyicisi" olarak ayarlayın ve yönetici olmayan bölümler için null olarak ayarlayın ya da hiçbir şey yapmadan bir varsayılan eylemi olan bir taban sınıf olabilir.

Senin yol muhtemelen iyi çalışır ben sadece tür daha onu yaklaşan kulüpler "nasıl olmalıdır tasarım bakmak" açı tür.