رو شروع کردم. واز اینکه یه سوال ابتدایی میپرسم معذرت میخوام.
من یه کلاس مدل به اسم
user
دارم . و میخوام توی تابع
rules
از اون
برای اعتباری سنجی فیلدی به اسم
name
از یه تابع اعتبارسنجی که خودم تعریف کردم استفاده کنم. مثل زیر
array(‘name’, ‘fun’)
و حالا اومدم تابع رو به شکل زیر تعریف کردم
public function fun($name){
if($this->name =='demo')
return true;
else
return false;
{
اما متاسفافه در هر حالت این تابع مقدار صحیح برمیگرداند و انگار نوشتن این تابع هیچ اثری نداره. میشه راهنماییم کنید و بهم بگید چطور میتونم یه تابع درست بنویسم.[/right].
[rtl][font="Tahoma"]تعیین سطح دسترسی چند روش داره که من روش عبارت های PHP رو توضیح میدم. توی کنترلر دو متد filters و accessRules به صورت زیر اضافه کنید:[/font][/rtl]
public function filters()
{
return array(
'accessControl',
'postOnly + delete',
);}
public function accessRules()
{
return array(
array('allow',
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow',
'actions'=>array('create','update','admin','delete'),
'users'=>array('@'),
'expression'=>'isset($user->role) && (($user->role==="ad") || ($user->role==="au"))'
),
array('deny',
'users'=>array('*'),
),
);
}
[rtl][font="Tahoma"]مهمترین قسمت در کد بالا عبارت expression هست که به کمک اون میتونید یک یا چند شرط دسترسی تعیین کنید. مثلاً در کد بالا دسترسی به اکشن های index و view برای عموم آزاد هست اما دسترسی به اکشن های create ، update ، admin و delete تنها برای کاربرانی هست که اولاً لاگین کرده باشن و ثانیا نقش اونها (role) مدیر (ad) یا نویسنده باشه (au). شما می تونید به دلخواه شرط موردنظر خودتون رو بنویسید.
البته دقت داشته باشید که role جزئی از کامپوننت user نیست بلکه من خودم اون رو توسط متد setState مربوط به کامپوننت UserIdentity اضافه کردم. کامپوننت UserIdentity توی مسیر protected/components هست. اینم نمونه کد این کامپوننت:[/font][/rtl]
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$user = User::model()->findByAttributes(array('username'=>$this->username));
if ($user === null) {
$this->errorCode=self::ERROR_USERNAME_INVALID;
}
elseif($user['password'] !== $this->password) {
$this->errorCode=self::ERROR_PASSWORD_INVALID;
}
else
{
$this->errorCode=self::ERROR_NONE;
$this->setState('role', $user->role);
$this->_id = $user->id;
}
return !$this->errorCode;
}
public function getId()
{
return $this->_id;
}
}