انجمن پشتیبانی فارسی فریم ورک کیک پی اچ چی - cakephp

نسخه کامل: ACL محدودیت نمایش اجزا در view
شما در حال مشاهده نسخه ساده شده مطالب هستید. نسخه کامل را به همراه قالب بندی ببینید.
سوال : توسط ACL می توان دسترسی کابران را به توابع محدود نمود اما اگر بخواهیم نمایش یک چیز در تابع را محدود کنیم باید چه کار انجام دهیم ؟

مثال : در یک سیستم وبلاگ می خواهیم در صفحه عمومی زمان نمایش پست ها فقط به گروه مدیران سایت لینک های ویرایش و یا حذف هر مطلب را نشان دهیم (محدودیت نمایش اجزا در View)
این کار پروسس زیادی می بره و خیلی دشوار هست پیاده سازیش.

من چندین روش رو امتحان کردم. بهترین روش روش ActionList در دلفی هست و برای پیاده سازی در کیک باید هلپیر های رو کاملا باز نویسی کنید.

خیلی زمان بر هست اسن موضوع
سلام
با اجازه جناب سوزنچی ،
اونطوری که من متوجه شدم شما می خواید مثلا لینک ویرایش و حذف رو فقط به مدیر نشون بدید .
خوب شما یک هلپر به شکل زیر بسازید .
کد PHP:
<?php
class AccessHelper extends Helper{
    var 
$helpers = array("Session");
    var 
$Access;
    var 
$Auth;
    var 
$user

    function 
beforeRender(){
        
App::import('Component''Access');
        
$this->Access = new AccessComponent(); 

        
App::import('Component''Auth');
        
$this->Auth = new AuthComponent();
        
$this->Auth->Session $this->Session

        
$this->user $this->Auth->user();
    } 

    function 
check($aco$action='*'){
        if(empty(
$this->user)) return false;
        return 
$this->Access->checkHelper('User::'.$this->user['User']['id'], $aco$action);
    } 

    function 
isLoggedin(){
        return !empty(
$this->user);
    }
}
?>
بعد شما فقط باید ببینید که این یوزر به ویرایش و حذف دسترسی داره یا خیر .
کد PHP:
<? if($access->check('Post')): ?><small><a href="/posts/edit/<? echo $post['Post']['id'?>">edit</a> | <? echo $html->link('delete''/posts/delete/'.$post['Post']['id'], NULL'Are you sure?'); ?></small><? endif; ?>

به این Component هم نیاز دارید :
کد PHP:
<?php
class AccessComponent extends Object{
    var 
$components = array('Acl''Auth');
    var 
$user

    function 
startup(){
        
$this->user $this->Auth->user();
    }
}
?>
روش محسن درست هست. البته برای موارد محدود و خیلی کم . اما اگر بحث کلی باشه (محدودیت نمایش اجزا در View) . این روش به نظرم زیاد کربردی نیست. چون ساختار باید RoleBase باشه.


محسن جان اگر از 2 استفاده می کنید می تونید مستقیما توابع رو به صورت استاتیک فراخوانی کنید.
نقل قول:AuthComponent::user('id')
با تشکر از دوستان پاسخ آقا mohsened فکر می کنم همون مثال سایت tutsplus باشه و خیلی دقیق نیست ، چون من می خوام نقش ها چک بشود .

سوال : آیا از دستور زیر می توان برای چک کردن نقش یوزر هم استفاده کرد ؟


کد PHP:
$this->Acl->check() 

ممنون
یافتم :

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

در کنترلر :
کد PHP:
if ($this->Acl->check(array('model' => 'Group''foreign_key' => $this->Session->read('Auth.User.group_id')), 'Posts/edit')){

    
$this->set('admin'true);

else{
$this->set('admin'false);}

 } 

و در ویو :

کد PHP:
<?php if ($admin): ?>
<?php 
echo $html->link('Edit', array('action' => 'edit'$post['Post']['id']), null'Are you sure?' )?>
<?php 
endif; ?>
لینک‌های مرجع