قسمت اول: مفهوم acl و نحوه پیاده سازی اش در cakephp
با استفاده از این کامپوننت به سادگی می توان بین دو موجودیت میزان یا سطوح دسترسی ایجاد نمود. این موجودیت ها را هر چیزی می توان در نظر گرفت مثل کاربران گروه ها یا action های مربوط به کنترلرها و ... ترمینولوژی
aco ها : ( Access controlled objects )
موجودیت هایی که بر رویشان کنترل دسترسی صورت می گیرد مثل یک کنترلر یا action های یک کنترلر
aro ها: ( Access request objects )
موجودیت هایی که تقاضای دسترسی دارند یا سطح دسترسی خودشان بر روی aco باید معین شود، مثل کاربر و گروه کاربری
CRUD :
مخفف action های create ، read ، update ، delete
permission ها:
مجوزهایی را گویند که بین aro ها و aco ها برقرار است مثل crud در حالت عادی و مجوزهای دیگری که می توان تعریف و مورد استفاده قرار داد.
Scaffolding: داربست
مفهومی انتزاعی در cakephp است که می توان به طور خودکار عملیات اولیه crud را بر روی جدولی از پایگاه داده ( مدل ) action ها و view هایی از قبل آماده شده و موجود در بسته cakephp ، اعمال کرد.
حالت های استفاده از ACL :
می توان از ACL در 2 حالت استفاده کرد ( با استفاده از رفتار acl قابل تعیین است نه خود کامپوننت ) در حالت اول می توانید یک کنترلر را معرفی کنید و فقط crud یا action هایی که به آن ها map می شود را مجوز بندی کنید.
در حالت دوم می توانید هر action کنترلر را به عنوان یک گره معرفی کنید و عملیات crud را روی آن مجوز بندی کنید.
مثلا در حالت اول می توان برای post مستقیما عمل create « ایجاد » را با 1 کردن فیلد متناظرش در جدول aros_acos را اجازه داد یا نداد.
در حالت دوم می توان برای عمل create یک aco ایجاد کرد و دوباره روی خود این aco ، crud را کنترل کرد.
دلیل این که چرا دو روش برای این کار در نظر گرفته شده برای من این طور به نظر می رسد که:
اولا crud مستقیما توسط scaffolding پشتیبانی می شود بنابراین توسعه دهنده توان اعمال سطوح دسترسی را حتی در زمانی که از scaffolding استفاده می نماید خواهد داشت که به دور از بزرگنمایی نشان از دید وسیع تیم توسعه cakephp است.
ثانیا زمانی که شما نیازی به غیر از این چهار action ندارید چه دلیلی دارد که رکورد به جداول acos و aros_acos اضافه نمایید؟
ثالثا در صورتی که action هایی به غیر از crud داشته باشید را می توانید به عنوان aco اضافه کرده و crud را بر روی آن اعمال کنید که به نوعی شکستن مسئله به زیر مسئله کوچکتر خواهد بود.
خوب حالا نگاهی به جداول مورد نیاز برای کنترل دسترسی در cakephp می اندازیم:
جدول acos که aco ها را نگهداری می کند دارای فیلد های زیر است:
id: شناسه ی aco که کلید اصلیست
parent_id : شناسه ی والد aco
model : مدلی که aco به آن اشاره یا تعلق دارد
foreign_key : کلید خارجی برای ارتباط
alias: که هر چیزی می توان قرار داد معمولا یا نام مدل است در هر دو حالت یا می تواند نام action باشد در حالت دوم.
Lft و rght فیلدهایی برای رعایت و بدست آوردن ساختار درختی است که درخت با استفاده از رفتار treeو این دو فیلد به سادگی قابل بازیابی است.
جدول aros که aro ها را نگهداری می کند :
id : شناسه aro که کلید اصلیست
parent_id: شناسه والد aro
model: مدلی که aro به آن اشاره یا تعلق دارد
foreign_key: کلید خارجی برای ارتباط
alias، lft و rght همانند جدول aco
جدول aros_acos :
جدولیست برای مشخص کردن ارتباط چند به چند بین aro ها و aco ها ، تگهداری و مشخص کردن persmission ها که crud را با استفاده از فیلدهای متناظرش در این جدول و 0 یا 1 در نظر گرفتن deny و allow به سادگی می توان اعمال کرد.
(آخرین تغییر در این ارسال: 2010/07/01 01:54 PM توسط cybercoder.)