SORU
24 Ocak 2011, PAZARTESİ


Nasıl Django grupları ve izinleri kullanırım?

Temel kullanıcı şeyler anlıyorum. Kimlik doğrulama, oturum açma, hesap oluşturma, vb biliyorum. Ama şimdi gruplar ve izinler üzerinde çalışmak istiyorum.

Nerede django gruplar için izinleri belgeleri mi? Bu değildir: http://docs.djangoproject.com/en/dev/topics/auth/

CEVAP
24 Ocak 2011, PAZARTESİ


Sana ihtiyacım var ve ne tür izinler ne sormanız gereken ilk soru sanırım. Ne gibi, yani Model veya Nesne düzeyinde istiyorsun. Farkı açıklamak için model bir Araba var. Eğer tüm arabalar üzerinde izinleri vermek istiyorsanız, daha sonra Model-seviye uygun olur, ama eğer her araç için ayrı ayrı izinleri vermek istiyorsanız Nesne düzeyinde istiyorsun. İkisine de ihtiyacınız olabilir, ve bu gibi bir sorun değil.

Senin için bu işler Django Model izinleri için... çoğunlukla. Her model Django şeklinde izinleri 'appname.oluşturmak için'. permissionname_modelname Eğer bir uygulama adı varsa 'sürücülerin Araba modeli o zaman izin olurdu bir 'sürücüler.'. delete_car Django otomatik olarak bu izinleri oluşturmak, değiştirmek ve silmek olacak oluşturur. CRUD okuma izinleri dahil etmemeye karar verdiler bazı garip nedenlerden ötürü, bunu kendiniz yapmak zorunda kalacak. Django CRUD değiştirmek için karar verdiğini not '' 'değiştirmek' nedense. update Bir model için daha fazla izin ekleyin, diyelim ki izinleri okumak için Meta sınıfı kullanın:

class Car( models.Model ):
    # model stuff here
    class Meta:
        permissions = ( 
            ( "read_car", "Can read Car" ),
        )

İzinleri demet öğeleri yukarıda açıklandığı gibi izni ve bu izni bir açıklama nerede dizilerini, bir dizi olduğunu unutmayın. Permname_modelname sözleşme takip etmek zorunda değilsiniz, ama ben genelde sopa ile.

Son olarak, izinleri kontrol etmek için, has_perm kullanabilirsiniz:

obj.has_perm( 'drivers.read_car' )

Nerede n ya Kullanıcı ya da Grup örneği. Bunun için bir fonksiyon yazmak daha kolay olur bence

def has_model_permissions( entity, model, perms, app ):
    for p in perms:
        if not entity.has_perm( "%s.%s_%s" % ( app, p, model.__name__ ) ):
            return False
        return True

Nerede varlıktır nesne için izinleri kontrol ediniz (Grup veya Kullanıcı), model örnek bir model, perma listesi izinleri dizeleri kontrol edin (örneğin ['read', 'değişim']), ve app uygulama adı olarak bir dize. Aynı kontrol yukarıdaki gibi has_perm yapmak için böyle bir şey diyoruz:

result = has_model_permissions( myuser, mycar, ['read'], 'drivers' )

Eğer nesne veya satır izinleri (bunlar aynı şey demek) kullanmak istiyorsanız, o zaman Django gerçekten kendisi sana yardım edemez. Güzel olan her iki modeli kullanmak ve izinleri yan yana nesnesi olabilir. Eğer 9 ** eğer 1.2 kullanıyorsanız ) ya da bir başkası yazmış bir proje bulmak da gerekecek nesne izinleri istiyorsanız, benim gibi bir washingtontimes django-objectpermissions.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EEVblog

    EEVblog

    4 NİSAN 2009
  • HowcastFoodDrink

    HowcastFoodD

    21 EYLÜL 2010
  • Joe DiFeo

    Joe DiFeo

    7 AĞUSTOS 2012