URL domain.com / hesap / denetleyici / eylem ile bir CakePHP uygulaması birden fazla hesap ve kullanıcı idare

2 Cevap php

Ne başarmak için gereken tek bir veritabanı ancak birden fazla hesap (şirketler), birden fazla kullanıcı ile her biri tek bir uygulama.

Aşağıdaki gibi URL kongre olmalıdır: domain.com / hesap / denetleyicisi / eylem

Yani TÜM kontrolörleri firma / hesap adı öneki.

Tüm hesaplar tek bir veritabanı paylaşmak istiyorsunuz, ama her biri kendi verilerine erişimini kısıtlamak mümkün olması gerekir.

Soru nasıl bu uygularım, nedir? Ben ilk URL parametresi (hesap) dışarı şerit ve içten app_controller tarafından çözümlenen sorgu parametresi olarak geçmek htaccess rewrite çeşit uygulama hakkında düşündüm. Meydan okuma, ancak uygulaması boyunca tüm bağlantıları ile bütünlüğünü muhafaza edilir. Yani kek yönlendirme şekilde hesap parametresi farkında olmalı ve tüm outputted bağlantıları geçmek gerekir.

Herkes önce buna benzer bir şey başardığını?

2 Cevap

Sen Rotalar ile iki, iki şey yapabilirsiniz.

Birincisi, yolları bir değişkeni ayarı:

Router::connect('/:user/blog/*', array('controller' => 'blogs', 'action' => 'index'));

Ve şimdi $this->params['user'] ile kullanıcı değişken erişebilirsiniz. Bu ile bir şey elle yönetmek istediğiniz her denetleyici ve eylem ayarlamak zorunda olmasıdır. Ben çoğu kez o CakePHP varsayılan yolları mimarisini yeniden yazmak daha iyidir çünkü, hiçbir büyük anlaşma olduğunu düşünüyorum.

İkinci olarak, bir değişken için bekliyor söyleyebilir ve işlevi parametre olarak erişilebilir olacaktır.

Router::connect('/(.*)/*', array('controller' => 'blogs', 'action' => 'index'));

Sizin denetleyicisi:

function index($a, $b){
    pr($a);
    pr($b);
}

Ve şimdi hem değişkenler elde edilecektir.

Belki Htaccess iyi bir fikir olabilir yeniden, otomatik olarak yapılabilir eğer ben bilmiyorum.

Bu yardımcı umuyoruz.

Bunu yapmak için mükemmel mümkün (ama ben hiç yapmadım).

Ben size standart CakePHP kimlik doğrulama düzeni kullanmak varsayalım. Eğer öyleyse, şu anda oturum açmış kullanıcının hakkında bilgi Auth-> Kullanıcı dizide bulunabilir.

Kek Eğer veritabanında bir tablo kullanıcıları için bekliyor. Sen (yani tüm tabloları bir User_id alana sahip) kullanıcı tablo ile bir belongsTo ilişki olması için modelleri değiştirmek gerekir.

Modellerinizde muhtemelen User_id alan şu anda oturum açmış kullanıcının maçlar kontrol ve return false afterFind () kanca kullanmak olabilir thats durumda eğer. Sizin denetleyicisi sonra yanlışlığı için tüm model işlemleri kontrol etmelisiniz.

. Htaccess fikri muhtemelen çok iyi değil. (Eğer AppModel sınıfta afterFind geri arama koyabilirsiniz) ve model olacağını kek, veri kaynağına mümkün olduğunca yakın yetkilendirme koymak gerekir.

Sizin örnek genişletme:

Kullanıcı istekleri / someController / someAction.

someAction:

if($this->someModel->someOperation(someArgument)) {

   //OK, show view

} else {

   // Something went wrong
   // Your afterFind method provides a clue via the model->failure attribute

   $this->flash($this->someModel->failure);

}