─░tibar temelli izinlerin uygulanmas─▒ [kapal─▒]


Al─▒nan cevaba git


Her kullan─▒c─▒ veya kullan─▒c─▒ grubu i├žin proje, kullan─▒c─▒ ve izinlerin bulundu─ču bir web sitesi olu┼čturuyorum. Bunun bir topluluk i┼čbirli─či arac─▒ oldu─ču ve 4 farkl─▒ iznim var:

  • Olu┼čturan - de─či┼čiklik yap─▒n, de─či┼čiklikleri kabul edin, izinleri de─či┼čtirin
  • De─či┼čiklikleri kabul et
  • De─či┼čiklik yapmak
  • G├Âr├╝n├╝m

Veritaban─▒nda bu t├╝r bir izin sistemini kullan─▒c─▒ gruplar─▒ i├žin nas─▒l uygulayabilirim?

D├╝zenleme: Gruplar / izinler, StackOverflow'taki gibi itibarla tan─▒mlan─▒r.

D├╝zenleme 2 - daha fazla ayr─▒nt─▒: Her dosyan─▒n izninin olmas─▒ gerekir, projelerin yeni olu┼čturulan dosyalar i├žin varsay─▒lan izinlere ihtiyac─▒ vard─▒r ve ayr─▒ca MySQL veritaban─▒ izinlerini de ayarlad─▒m.


44





2011-05-14




Cevap say─▒s─▒n─▒ say: 3






 user_table
id, etc

permission table
id, user_id, permission_type
 

Bu yap─▒da, her kullan─▒c─▒, hesaplar─▒yla ili┼čkilendirilmi┼č , eri┼čebilecekleri her ├Âzellik grubu i├žin bir tane olmak ├╝zere, ├že┼čitli izin t├╝rlerine sahip olabilir . Yeni izin t├╝rleri eklemek i├žin tablo yap─▒s─▒n─▒ hi├žbir zaman de─či┼čtirmeniz gerekmez.

Bunu bir ad─▒m daha ileriye ta┼č─▒mak i├žin, her izin t├╝r├╝n├╝ ikili bir say─▒ haline getirebilirsiniz. Bu yolla, bitsel operat├Ârleri kullanarak bir tamsay─▒ ile bir izin setinin temsil edilmesini sa─člayabilirsiniz.

Mesela sabitleriniz varsa

 PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
 

Bu de─čerleri bitsel bir operat├Âr "|" kullanarak tek bir tamsay─▒da birle┼čtirebilirsiniz.

 (PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
 

daha sonra belirli bir izinleri olup olmad─▒─č─▒n─▒ kontrol etmek i├žin, "&"

 ($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
 

Bunu yapt─▒ysan─▒z, her izin k├╝mesi i├žin yaln─▒zca bir db kayd─▒na ihtiyac─▒n─▒z olacakt─▒r.


59







Bunun i├žin ge├žmi┼čte Zend_Acl kulland─▒m . Tavsiye edebilirim. Denenmi┼č ve test edilmi┼č bir kitapl─▒k, uygulanmas─▒ olduk├ža kolay ve tek ba┼č─▒na kullan─▒labilir. Daha sonra eklemek i├žin farkl─▒ izin ┼čemalar─▒n─▒z varsa, bu se├ženek iyi ├Âl├žeklenir.


3







─░ki tablo olu┼čturaca─č─▒m; kullan─▒c─▒lar ve r├╝tbeler.

 User
-----
id
username
rankID


Ranks
------
id
makeChanges
acceptChanges
changePermissions
view
 

Sonra sadece S─▒ralar tablosunda istedi─činiz ├že┼čitli s─▒ralar─▒ olu┼čturun ve kullan─▒c─▒lar─▒n s─▒ra numaralar─▒n─▒ istedi─činiz kar┼č─▒l─▒k gelen e┼čle┼čecek ┼čekilde ayarlay─▒n. Her alanda Ranks tablosunda 0 veya 1 de─čerine ayarlad─▒─č─▒n─▒zdan emin olun; 0 bu yetene─če sahip de─čil ve 1 bu se├žene─če sahip.

D├╝zenleme E─čer bunu bir veritaban─▒ olmadan yapacak olsayd─▒n─▒z, PHP5'teki s─▒n─▒flarla veya hatta ├Ârneklerle bunu yapabilirdiniz. ├ľrne─čin, orijinal postan─▒zdaki her bir ┼čey i├žin bir ad belirledi─činizi varsayal─▒m:

 Creator - make changes, accept changes, change permissions
Reviewer - Accept changes
Editor - Make changes
Regular - View
 

O zaman a┼ča─č─▒daki gibi bir ┼čey yapabilirsin. (Veritaban─▒ yolu a├ž─▒k├žas─▒ ├žok daha iyi bir yol olurdu, ama bu sadece bir ├Ârnek.)

 class Regular
{
    public function View()
    {
        //Do the view stuff in here
    }
}

class Editor extends Regular implements Edit
{

}

class Reviewer extends Regular implements Review
{

}

interface Review
{
    public function AcceptChanges()
    {
        //Do the accept changes here
    }
}

interface Edit
{
    public function MakeChanges()
    {
        //Do the make changes stuff here
    }
}


class Creator extends Regular implements Edit, Review
{
    public function ChangePermissions()
    {
        //Do the change permissions stuff here
    }
}
 

0



─░lgili yay─▒nlar


AWS ssh eri┼čimi '─░zin reddedildi (publickey)' sorunu [kapal─▒]

C++ STL neden bu kadar ├žok ┼čablona dayan─▒yor? (ve * aray├╝zlerde *)

Backbone.js tabanl─▒ bir├žok ├žer├ževenin ger├žek d├╝nyadaki g├╝├žl├╝ ve zay─▒f y├Ânleri nelerdir? [kapal─▒]

Y├╝zdelik geni┼čli─če g├Âre div y├╝ksekli─čini ayarlayabilir miyim? [├žift]

Baz tabanl─▒ sistemlere dayal─▒ algoritmalar? [kapal─▒]

Python, __eq__ temelinde __ne __ () operat├Âr├╝n├╝ uygulamal─▒ m─▒y─▒m?

Yay - Ek A├ž─▒klama Tabanl─▒ Denetleyici - Sorgu dizesini temel alan RequestMapping

libclang dayal─▒ herhangi bir C / C++ refactoring arac─▒? (en basit ÔÇťoyuncak ├Ârne─čiÔÇŁ bile) [kapal─▒]

CodeIgniter'─▒ temel alan CMS [kapal─▒]

jQuery UI sekmeleri. Dizine g├Âre de─čil, kimli─čine g├Âre bir sekme nas─▒l se├žilir

Etiketle ilgili di─čer sorular [php]


Komut sat─▒r─▒ de─či┼čkenlerini bir Node.js program─▒na nas─▒l iletirim?

─░li┼čkisel bir veritaban─▒nda hiyerar┼čik verileri saklama se├ženekleri nelerdir? [kapal─▒]

ThreadLocal de─či┼čkenini ne zaman ve nas─▒l kullanmal─▒y─▒m?

Se├žilen ├Â─čenin d─▒┼č HTML'sini al

Bir giri┼č alan─▒nda s├Âzde elemandan sonra: before veya: kullanabilir miyim?

Yerel kabul edilmemi┼č de─či┼čikliklerimi ba┼čka bir Git ┼čubesinde nas─▒l birle┼čtiririm?

Zaman uyumsuz bir G├Ârev <T> y├Ântemini e┼čzamanl─▒ olarak nas─▒l ├žal─▒┼čt─▒r─▒r─▒m?

Ayn─▒ dizinde veya alt dizinde s─▒n─▒f nas─▒l i├že aktar─▒l─▒r?

Modern Perl neden UTF-8'i varsay─▒lan olarak ├Ânl├╝yor?

Unicode dizesini Python'da bir dizgeye d├Ân├╝┼čt├╝r├╝n (fazladan semboller i├žerir)