نحوه کارکرد سیستم تصدیق هویت در CakePHP

March 5, 2009 at 09:49 am

از آنجایی که قصد داشتم در مورد کامپوننت‌های ACL و Authentication در کیک پی‌اچ‌پی بنویسم (و خیلی‌ها کار با ACL در کیک را از مباحث دشوار می‌دانند)، بهتر دیدم برای فهم بیشتر پست‌های آینده، ابتدا مختصری بصورت تئوری در مورد یک مدل تصدیق هویت کاربر توضیح دهم و سپس با مثال‌های عملی شروع کنم.

سیستم‌های تصدیق هویت کاربر بخش رایج بسیاری از برنامه‌های کاربردی تحت وب هستند. در CakePHP چندین سیستم بدین منظور وجود دارد که هر یک اختیارات متفاوتی ایجاد می‌کند. ساده‌ترین آن استفاده از کامپوننت authentication است که در صورت تصدیق کاربر، مجوز ورود به تمام بخش‌های برنامه می‌دهد.

این کامپوننت می تواند با کامپوننت دیگری بنام Access Control Lists برای ساخت مدل‌های پیچیده‌تری که سطوح مختلفی از دسترسی را تعیین می‌کند، ترکیب شود. برای مثال به یک کاربر مجوز دسترسی به بخش‌های عمومی، به دیگری اجازه ویرایش مطالب و به کاربری دیگر مجوز مدیر سیستم را بدهد.

کار با کامپوننت authentication بطور باورنکردنی ساده‌ و سریع است اما کاربرد کامپوننت ACL شاید برای بار اولی که از ان استفاده می‌کنید کمی مشکل‌تر باشد اما با یادگیری کاربرد آن به یکی از جالب‌ترین و پرقدرت ترین کامپوننت‌های توکار کیک تبدیل خواهد شد. برای شروع یک سناریو ساده به شکل زیر را که در عمل صورت می‌گیرد تصور کنید:

1- تلاش برای مشاهده آدرس. در ابتدا فرض کنید کاربری بنام محسن سعی میکند محتویات صفحه‌ایی به آدرس http://alvanweb.com/article/edit را مشاهده کند.

2- تجزیه‌ آدرس. هنگامی که درخواست کاربر از طریق مرورگر ارسال می‌شود، کامپوننت authentication تشخیص می‌دهد که آدرس درخواستی با کنترلری بنام article و کنشی بنام edit (که خود با کنشی از نوع update رابطه دارد) در ارتباط است.

3- آیا صفحه محدود شده است؟ همچنین این کامپوننت تشخیص می‌دهد که دسترسی به این کنش در کنترلر article محدود شده است. بنابراین بررسی می‌کند که آیا کاربر وارد سیستم شده است یا خیر.

4- نمایش فرم ورود کاربر. تا هنگامی که کاربر وارد نشده باشد هر درخواستی برای مشاهده این آدرس به صفحه‌ایی حاوی فرم ورود هدایت می‌شود تا کاربر بتواند با درج نام و کلمه عبور وارد سیستم شود.

5- تطبیق نام‌ و کلمه عبور کاربر. پس از ارسال فرمی که منطبق با اطلاعات موجود در بانک‌داده است، این کامپوننت تشخصی می‌دهد که نام‌کاربری mohsen است. تا اینجا فقط صحبت از کامپوننت authentication بود…

6- پرسش از ACL برای دسترسی. کامپوننت authentication از ACL می‌پرسد که آیا کاربر mohsen اجازه دارد کنش update رابرای کنترلر article بکار برد یا خیر.

7- ACL دسترسی را تشخصی می‌دهد. حال کامپوننت ACL با بررسی جدول‌های داده تشخیص می‌دهد که کاربر mohsen بطور صریح به هیچکدام از صفحات این سایت بمنظور ویرایش دسترسی ندارد اما این کاربر جز‌ء گروه ویراستار‌ها (Editors) می‌باشد و هر کاربری جزء این گروه قابلیت ویرایش مقالات را دارد. بنابراین کامپوننت ACL این‌گونه پاسخ می‌دهد: تا هنگامی که کاربر mohsen یک ویراستار است، وی مجوز ویرایش مقالات را به ارث می‌برد.

8- authentication هدایت می‌کند. بمحض تشخیص این دسترسی مجددا کامپوننت authentication وارد می‌شود تا کاربر را به صفحه درخواستی هدایت کند.

نکته کلیدی: کامپوننت ACL می‌بایستی با یک سیستم ورود کاربر بکار گرفته شود.
آنچه مدل بالا در این نوع از کاربرد نشان می‌دهد، نقش کامپوننت ACL بررسی مجوزهای خاص برای دسترسی به بخش‌های مختلف سیستم است بدین دلیل می‌توانیم استدلال کنیم، این کامپوننت باید با کامپوننتی در ارتباط باشد که شامل موارد زیر باشد:

+ نام و کلمه عبور را ذخیره کند.
+ نام و کلمه عبور را از فرم ورود بگیرد.
+ نام و کلمه عبور را با مقادیر ذخیره شده تطبیق دهد.
+ بمحض تطبیق موفق، نام کاربری را با اطلاعات نوع درخواست به کامپوننت ACL ارسال کند.
+ صفحه در خواستی را نمایش دهد یا اینکه با توجه به مجوزی که کامپوننت ACL تعیین می‌کند به صفحه دیگری هدایت کند.

بنابراین می‌توان دریافت کامپوننت توکار authentication یک انتخاب طبیعی برای داشتن یک سیستم ورود کاربر است. که می‌تواند در کنار ACL بکار گرفته شود.

نمونه بالا تنها یک تفکیک وظیفه میان این دو کامپوننت بود. در پست‌های آینده در مورد این کامپوننت و کاربرد آن خواهم نوشت سپس کار با کامپوننت ACL را فرا می‌گیرد در نهایت در مثال ساخت لینکدونی با CakePHP که در همین وبلاگ آموزش داده شد از این دو کامپوننت استفاده می‌کنیم.

دسته: پی اچ پی | نویسنده: مرتضی الوانی
  1. 5 نظر برای این مطلب ارسال شده است. نظر خود را ارسال کنيد »

  1. 1

    مهدی


    ممنون – بحث پرکاربردی رو دنبال کردی. طبق معمول منتظر پست‌های بعدی هستم.
    به امید روزی که تعداد مطالبی از این دست در وبلاگستان فارسی بیشتر شه!!! (افزایش سواد و معرفت)
    راستی با Symfony چه کردی؟؟؟ ;)

    March 5, 2009 at 12:38 pm

  2. 2

    مرتضی الوانی


    @ مهدی
    ممنون. هنوز هیچ پروژه‌ای با سیمفونی انجام ندادم. فقط یه خورده کلاس‌هاشو دید زدم :-) فعلا در دست مطالعه است…

    March 5, 2009 at 1:44 pm

  3. 3

    بهشتی


    سلام
    اینو ببینید بد نیست. بدون ACL فقط با Auth پیاده سازی کرده سطح دسترسی رو .
    http://www.studiocanaria.com/articles/cakephp_auth_component_users_groups_permissions_revisited#c836

    March 9, 2009 at 9:41 am

  4. 4

    کورش اسلام زاده


    سلام

    خبرخوان (تکست و گرافیکی)، لیست و فید وبلاگ‌های برنامه‌نویسی ارائه شده است که وبلاگ شما نیز جز آنها قرار گرفته است.

    http://persianbloggers.blogspot.com/2009/03/programming-p.html

    پرشین بلاگرز شما را به بازدید و استفاده از این خبرخوان و 23 خبرخوان تخصصی دیگر موجود دعوت می‌کند.

    March 9, 2009 at 8:51 pm

  5. 5

    کورش اسلام زاده


    سلام

    خبرخوان (تکست و گرافیکی)، لیست و فید وبلاگ‌های «آی تی» ارائه شده است که وبلاگ شما نیز جز آنها قرار گرفته است.

    این خبرخوان یکی دیگر از محصولات همکاری جمعی در پرشین بلاگرز است که با همکاری و مدیریت آقای سید یوسف منیری به وبلاگ‌شهر عرضه شده است.

    http://persianbloggers.blogspot.com/2008/12/it-p.html

    پرشین بلاگرز شما را به بازدید و استفاده از این خبرخوان و 24 خبرخوان دیگر موجود دعوت می‌کند.

    March 10, 2009 at 11:55 pm