نمایش نتایج 1 تا 10 از 10

نام تاپیک: سطح دسترسی به پروفایل کاربران

  1. #1
    کاربر دائمی آواتار reza.palang
    تاریخ عضویت
    دی 1385
    محل زندگی
    میون یهک جفت کروشه
    پست
    299

    سطح دسترسی به پروفایل کاربران

    با سلام مجدد
    سوالی که داشتم در مورد سیستم تعیین هویت هست.
    تا اونچا که من آشنا شدم برای آدرس هایی به شکل زیر میشه برای کاربر های مختلف سطح دسترسی تعریف کرد.
    /controller
    /controller/action

    میخوام بدونم برای آدرسهایی به شکل زیر چطور میشه این کار رو کرد
    /controller/action/id

    مثلا برای اینکه هر کاربر فقط به پروفایل خودش دسترسی داشته باشه و نه دیگر پروفایل ها

  2. #2
    کاربر دائمی آواتار cybercoder
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    root/
    پست
    2,018

    نقل قول: سطح دسترسی به پروفایل کاربران

    خوب با Acl فقط به همین کاربر allow بده دیگه فکر کنم حل بشه

  3. #3
    کاربر دائمی آواتار reza.palang
    تاریخ عضویت
    دی 1385
    محل زندگی
    میون یهک جفت کروشه
    پست
    299

    نقل قول: سطح دسترسی به پروفایل کاربران

    ممنون برای جواب
    چطور این کار باید انچام بشه؟
    از یه همچین چیزی باید استفاده بشه؟:
    $this->Auth->user

  4. #4
    کاربر دائمی آواتار zoghal
    تاریخ عضویت
    شهریور 1383
    محل زندگی
    همدان
    سن
    42
    پست
    401

    نقل قول: سطح دسترسی به پروفایل کاربران

    متاسفانه من هنوز نتونستم منطق به کار گیری acl رو یاد بگیرم و استفاده کنم. وحید جان یک توضیح میدی؟

  5. #5

    نقل قول: سطح دسترسی به پروفایل کاربران

    من فکر کنم باید در مدل نوع ACL را controlled قرار داد.
    var $actsAs = array('Acl' => array('type' => 'controlled'));
    من هم خیلی دنبال این موضوع هستم که بتونم برای یک رکورد خاص سطح دسترسی قرار دهم. مثلاً برای یک یوزر میخوام تعیین کنم به چه دسته ای از اخبار بتونه دسترسی داشته باشه و اونو مدیریت کنه. هنوز داکیومنشن کاملی رو در این زمینه پیدا نکردم

  6. #6
    کاربر دائمی آواتار cybercoder
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    root/
    پست
    2,018

    نقل قول: سطح دسترسی به پروفایل کاربران

    خوب دوستان شما این لینک رو مطالعه بفرمایید آقای مارک استوری تقریبا خوب توضیح داده:
    http://www.mark-story.com/nodes/view...-tutorial-pt-1
    اما بیاد داشته باشید که به چند روش مختلف میشه از ACL استفاده کرد.
    فقط این توضیح رو بدم که ببینید وقتی شما می خواهید به طور مثال یک "پست خاص" یا یک "مقاله خاص" که خودش عضو مجموعه ای هستش رو به طور مثال:
    تقی مجوز رایت کل اون مجموعه رو داره
    شما می خواید به حسن مجوز ویرایش یا حذف فقط همون پست رو بدید.
    یا هیچ کس نداره فقط حسن داشته باشه ( مثل همون پروفایل )

    لازمه که شما در هنگام ایجاد اون رکورد در جدول ACO ها تون یعنی اشیائی که بر اون ها کنترل باید صورت بگیره ( اسمش روشه دیگه ) یه رکورد متناظر بزنید.
    بعدا با دستور ACL->Allow می تونید خیلی راحت به حسن اجازه مجوز خاصی رو روش بدید

    مثلا این تابع برای ذخیره یک پست یا مقاله رو ببینید:

    function add() {
    if (!empty($this->data)) {
    $this->Post->create();
    $current_user=$this->Auth->user() ;
    $this->data['Post']['user_id']=$current_user['User']['id'] ;
    if ($this->Post->save($this->data)) {
    $parent = $this->Acl->Aco->findByAlias('Posts');
    $this->Acl->Aco->create(array(
    'alias' =>$this->data['Post']['title'].':'.$this->Post->id,
    'model' => 'Post',
    'foreign_key' => $this->Post->id,
    'parent_id' => $parent['Aco']['id']
    )
    );
    $this->Acl->Aco->Save() ;

    $this->Session->setFlash(__('The Post has been saved', true));
    $this->redirect(array('action'=>'index'));
    } else {
    $this->Session->setFlash(__('The Post could not be saved. Please, try again.', true));
    }
    }
    }

    تو این کد میایم به محض اینکه یک پست اضافه میشه یک رکورد متناظر در جدول ACOS می زنیم
    خوب حالا خیلی راحت می تونید با دستور Allow مجوزها رو کنترل کنیم

    اگر از Auth و ACL با هم استفاده کنید خیلی از مسائل راحت تر و سریع تر حل میشه هرچند اینها لازم و ملزوم یکدیگر نیستند و هرکدام به تنهایی کار خودش رو میکنه

    اگر روشن نشد بگید من یک مقداری کد قبلا در این مورد نوشتم براتون میذارم اگر نه یه مقاله به صورت Tutorial بنویسم
    موفق باشید

  7. #7
    کاربر دائمی آواتار zoghal
    تاریخ عضویت
    شهریور 1383
    محل زندگی
    همدان
    سن
    42
    پست
    401

    نقل قول: سطح دسترسی به پروفایل کاربران

    من امروز رو کلا روی همین وفت گزاشتمو تا یک چیزایی وایم داره روشن شد. بیشتر گیرم روی تیبل های aro و aco هست. که گروپ ها و یا دسته بندی ها رو چه طور باید انجام بدیم.

  8. #8
    کاربر دائمی آواتار cybercoder
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    root/
    پست
    2,018

    نقل قول: سطح دسترسی به پروفایل کاربران

    برای ساده شدن aco ها رو همون شی ها در نظر بگیر aro ها رو هم کاربران و گروه های کاربری که به شی ها دسترسی دارن
    شی ها چین؟ می تونه کل کنترلر مقالات باشه یا فقط یک مقاله
    حالا اگه یک مقاله باشه parent ش میشه مقالات یا مجموعه ای از مقالات

  9. #9

    نقل قول: سطح دسترسی به پروفایل کاربران

    مثلا این تابع برای ذخیره یک پست یا مقاله رو ببینید:
    کد:

    function add() {
    if (!empty($this->data)) {
    $this->Post->create();
    $current_user=$this->Auth->user() ;
    $this->data['Post']['user_id']=$current_user['User']['id'] ;
    if ($this->Post->save($this->data)) {
    $parent = $this->Acl->Aco->findByAlias('Posts');
    $this->Acl->Aco->create(array(
    'alias' =>$this->data['Post']['title'].':'.$this->Post->id,
    'model' => 'Post',
    'foreign_key' => $this->Post->id,
    'parent_id' => $parent['Aco']['id']
    )
    );
    $this->Acl->Aco->Save() ;

    $this->Session->setFlash(__('The Post has been saved', true));
    $this->redirect(array('action'=>'index'));
    } else {
    $this->Session->setFlash(__('The Post could not be saved. Please, try again.', true));
    }
    }
    }
    تو این کد میایم به محض اینکه یک پست اضافه میشه یک رکورد متناظر در جدول ACOS می زنیم
    این کار رو میشه به طور اتوماتیک توی مدل با تنظیم تابع parentNode انجام داد. فقط قبلش باید کد زیر رو هم در مدل قرار داد.
    var $actsAs = array('Acl'=> array('type' => 'controlled'));

  10. #10
    کاربر دائمی آواتار cybercoder
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    root/
    پست
    2,018

    نقل قول: سطح دسترسی به پروفایل کاربران

    این کار رو میشه به طور اتوماتیک توی مدل با تنظیم تابع parentNode انجام داد. فقط قبلش باید کد زیر رو هم در مدل قرار داد.
    بله با فراخوانی تابع Aftersave و override کردنش راحت تره منتها من یکجا گذاشتم تا دوستانی که تازه دارند یاد می گیرند confuse نشن. در مورد actas هم می تونه به صورت controlled یا requester باشه که بستگی به شما داره که چطور از acl استفاده می کنید
    این کد رو که من موقع ثبت نام کاربر در یکی از سایت ها استفاده کردم ببینید: ( در مدل )

    var $actsAs=array('Acl'=>'requester') ;
    var $belongsTo=array('Group') ;

    function afterSave($created) {
    if ($created) {
    $id=$this->getLastInsertID() ;
    $aro=new Aro() ;
    $aro->updateAll(array('alias'=>'\'User:'.$id.'\''),
    array('Aro.model'=>'User',
    'Aro.foreign_key'=>$id)
    );
    }
    else {
    $data=$this->read() ;
    $parent_id=$data['User']['group_id'] ;

    $aro=new Aro() ;

    $aro_record=$aro->findByAlias('Group:'.$parent_id) ;
    $parent_record=$aro->findByAlias('Group:'.$parent_id) ;

    if (!empty($aro_record)) {
    $parent_id='0' ;
    if (!empty($parent_record)) {
    $parent_id=$parent_record['Aro']['id'] ;
    }


    $aro->save(array(
    'parent_id'=>$parent_id,
    'id'=>$aro_record['Aro']['id']
    )) ;
    }
    }
    return true ;
    }

    function parentNode() {
    $data=$this->read() ;
    return 'Group:'.$data['User']['group_id'] ;
    }

    موفق باشید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •