زمان جاری: 2012/02/23, 03:24 PM خوش آمدید مهمان گرامی! (ورودعضویت)



ACL محدودیت نمایش اجزا در view


ارسال موضوع  ارسال پاسخ 
  • 1 رای - 2 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
ACL محدودیت نمایش اجزا در view
نویسنده پیام
786ali آفلاین
عضو نیمه حرفه ای
**

ارسال‌ها: 56
تاریخ عضویت: Jul 2011
رتبه: 0
تشکر: 37
9 بار تشکر شده در 4 پست
ارسال: #1
Photo ACL محدودیت نمایش اجزا در view
سوال : توسط ACL می توان دسترسی کابران را به توابع محدود نمود اما اگر بخواهیم نمایش یک چیز در تابع را محدود کنیم باید چه کار انجام دهیم ؟

مثال : در یک سیستم وبلاگ می خواهیم در صفحه عمومی زمان نمایش پست ها فقط به گروه مدیران سایت لینک های ویرایش و یا حذف هر مطلب را نشان دهیم (محدودیت نمایش اجزا در View)
2011/12/04 10:23 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 694
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 259
501 بار تشکر شده در 373 پست
ارسال: #2
RE: ACL محدودیت نمایش اجزا در view
این کار پروسس زیادی می بره و خیلی دشوار هست پیاده سازیش.

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

خیلی زمان بر هست اسن موضوع
2011/12/05 02:51 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
mohsened آفلاین
محسن افتخاردادخواه
**

ارسال‌ها: 65
تاریخ عضویت: May 2010
رتبه: 1
تشکر: 55
72 بار تشکر شده در 27 پست
ارسال: #3
RE: ACL محدودیت نمایش اجزا در view
سلام
با اجازه جناب سوزنچی ،
اونطوری که من متوجه شدم شما می خواید مثلا لینک ویرایش و حذف رو فقط به مدیر نشون بدید .
خوب شما یک هلپر به شکل زیر بسازید .
کد 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();
    }
}
?>

[تصویر: 1.gif]
(آخرین تغییر در این ارسال: 2011/12/05 10:09 PM توسط mohsened.)
2011/12/05 10:07 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : saleh 786ali
saleh آفلاین
Administrator
*******

ارسال‌ها: 694
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 259
501 بار تشکر شده در 373 پست
ارسال: #4
RE: ACL محدودیت نمایش اجزا در view
روش محسن درست هست. البته برای موارد محدود و خیلی کم . اما اگر بحث کلی باشه (محدودیت نمایش اجزا در View) . این روش به نظرم زیاد کربردی نیست. چون ساختار باید RoleBase باشه.


محسن جان اگر از 2 استفاده می کنید می تونید مستقیما توابع رو به صورت استاتیک فراخوانی کنید.
نقل قول:AuthComponent::user('id')
2011/12/06 03:42 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : mohsened 786ali
786ali آفلاین
عضو نیمه حرفه ای
**

ارسال‌ها: 56
تاریخ عضویت: Jul 2011
رتبه: 0
تشکر: 37
9 بار تشکر شده در 4 پست
ارسال: #5
RE: ACL محدودیت نمایش اجزا در view
با تشکر از دوستان پاسخ آقا mohsened فکر می کنم همون مثال سایت tutsplus باشه و خیلی دقیق نیست ، چون من می خوام نقش ها چک بشود .

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


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

ممنون
2011/12/07 01:22 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
786ali آفلاین
عضو نیمه حرفه ای
**

ارسال‌ها: 56
تاریخ عضویت: Jul 2011
رتبه: 0
تشکر: 37
9 بار تشکر شده در 4 پست
ارسال: #6
RE: ACL محدودیت نمایش اجزا در view
یافتم :

اگر از دو کامپوننت 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; ?>
(آخرین تغییر در این ارسال: 2011/12/07 03:26 PM توسط 786ali.)
2011/12/07 03:25 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: