چند تا سوال در مورد تابع accessRules داشتم
1. اگه من بخوام که هیچ کاربری به غیر از اونی که لاگین کرده ( مثلا یک کاربری که می تونه تو پنل مدیریت سایت تغییرات انجام بده ) به صفحات و توابع موجود در پنل مدیریت دسترسی پیدا نکنه کدومو تغییر بدم؟
تابع من به این شکل هست :
public function accessRules() {
return array(
array('allow', //
'actions' => array(), ///<--------
'users' => array('*'),
),
array('allow', // allow authenticated user
'actions' => array('index', 'insert', 'update', 'view'),
'users' => array('@'),
),
array('allow', // allow admin user
'actions' => array('admin', 'delete'),
'users' => array('admin'),
),
array('deny', // deny all users
'users' => array('*'),
),
);
}
یعنی هر بار میام تو قسمتی که نشون دادم توابع رو می نویسم مثل :view,insert , update و ...
2. سوال دومم اینکه این از کجا میدونه کاربری که لاگین کرده admin هست و سطح دسترسی رو اعمال می کنه.( همونجایی که بعضی از اکشن هارو برای admin نوشتیم )
منظورم اینه که آیا حتما باید نام کاربریمون تو دیتابیس باید admin باشه تا تابع بفهمه کاربر Admin هست؟
3. چطوری می تونیم سطح دسترسی داینامیک بدیم با استفاده از RBAC ؟
تو یکی از پروژه هام باید چندتا کاربر تعریف کنیم به صورت داینامیک که کاربر تعریف شده فقط مثلا به اکشن view دسترسی داشته و نه به delete و یا update
نقل قول: چند تا سوال در مورد تابع accessRules داشتم
1- منظورتون رو دقیق تر بگین. مدیریت رو بصورت ماژول درست کردین؟
2- از روی فیلد name در CWebUser که در UserIdentity مشخص میشه، تشخیص میده.
3- درمورد استفاده از RBAC توی پکیج توضیح دادم ولی توی افزونه های Yii موارد بهتری هم هست. البته میتونید بطور دستی هم انجام بدین که اول باید جواب مورد 1 رو بدین تا برحسب نیازتون و نوع استفاده شما توی پروژه، راهنمایی کنم.
نقل قول: چند تا سوال در مورد تابع accessRules داشتم
نقل قول:
نوشته شده توسط
MMSHFE
1- منظورتون رو دقیق تر بگین. مدیریت رو بصورت ماژول درست کردین؟
بله دقیقا یک ماژول ادمین اضافه کردم
نقل قول: چند تا سوال در مورد تابع accessRules داشتم
خوب در این صورت، کارتون خیلی راحت تره. میتونید دسترسی به تمام اکشنها رو برای کاربران لاگین کرده باز بگذارین:
public function accessRules()
{
return array(
array(
'allow',
'users'=>array('@'),
),
array(
'deny',
'users'=>array('*'),
),
);
}
و بعد، توی فایل AdminModule.php که برای شما توی پوشه ماژول ساخته شده، این کد رو بنویسید:
<?php
class AdminModule extends CWebModule
{
public function init()
{
// this method is called when the module is being created
// you may place code here to customize the module or the application
// import the module-level models and components
$this->setImport(array(
'mngr.models.*',
'mngr.components.*',
));
}
public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
// this method is called before any module controller action is performed
// you may place customized code here
if(Yii::app()->user->isGuest || !in_array(Yii::app()->user->id, array(1, 3, 5)) {
throw new CHttpException(403, 'دسترسی غیر مجاز');
}
return true;
}
else
return false;
}
}
الان توی کد فوق، اگه id کاربر 1 یا 3 یا 5 نباشه، خطای 403 براش صادر میشه و میگه دسترسی غیرمجاز
اگه یکم روی این سیستم فکر کنید، به راحتی میتونید ساختار دستی خودتون رو برای RBAC بخش مدیریت ازطریق دیتابیس، ایجاد کنید و فرضاً رکورد متناظر با id کاربر جاری رو از جدول access در دیتابیس پیدا کنید. اگه اصلاً رکوردی نبود که یعنی کاربر مدیر نیست و اگه بود، فرضاً فیلد accessController و accessAction رو چک کنید و به ترتیب با this->id$ و this->action->id$ مقایسه کنید و اگه برابر بود یا رکورد مربوطه پیدا شد، اجازه بدین کار کنه وگرنه خطای 403 تولید کنید.
نقل قول: چند تا سوال در مورد تابع accessRules داشتم
بنده هم یک سوال در این زمینه برام پیش اومده ، که گفتم تاپیک جدید نزنم و همینجا بپرسم :لبخندساده:
اگر فرض کنیم یک پروژه ساده داشته باشیم که با accessRule ها کارمون راه بیفته . (یوزر ها هم تو db هستند)
حالا بخواهیم 2 تا و یا تعداد بیشتری user نقش admin رو داشته باشند ، باید چکار کنیم ؟؟
نقل قول: چند تا سوال در مورد تابع accessRules داشتم
دقیقاً پست قبل از خودتون رو بخونید. فکر میکنم جوابی که میخواین رو گذاشتم.
نقل قول: چند تا سوال در مورد تابع accessRules داشتم
آره درسته من به قضیه یه جور دیگه نگاه کرده بودم !