PDA

View Full Version : مدیریت سطح دسترسی



Veteran
دوشنبه 05 خرداد 1393, 13:48 عصر
سلام دوستان
بنده تا به امروز برای مدیریت سطح دسترسی
میومدم فیلتر تعریف میکردم
مثلا برای اینکه یک کاربر فقط بتونه رکورد های خودش رو اپدیت کنه ی فیلتر میزاشتم.
حالا با توسه پروژه و ... یکم به مشکل برخوردم
الان میخوام از RBAC استفاده کنم
یک جدول داریم مثلا کاربران
ی کاربر هست که فقط میتونه رکورد ( اطلاعات ) خودش رو اپدیت کنه
و ی مدیر که میتونه ماله هرکسیو اپدیت کنه
برای این نمونه اگر میشه راهنمایی بفرمایید
با تشکر

MMSHFE
دوشنبه 05 خرداد 1393, 13:59 عصر
نیازی نیست اینقدر موضوع رو پیچیده کنید. کافیه یه چنین کدی اول اکشن مربوطه بنویسید و دسترسیش رو توی accessRules روی @ تنظیم کنید:

if($model->id != Yii::app()->user->id && !Yii::app()->user->checkAccess('update', array('model'=>$model))) {
throw new CHttpException(403, 'Unauthorized access.');
}

Veteran
دوشنبه 05 خرداد 1393, 14:29 عصر
خب پس ما اول ی همچین چیزی داریم

$this->_authManager->createOperation("readUser", "read User");
$this->_authManager->createOperation("updateUser", "update User");
$this->_authManager->createOperation("deleteUser", "delete User");
$role = $this->_authManager->createRole("member");
$role->addChild("readUser");
$role->addChild("updateUser");
$role->addChild("deleteUser");

بعد به ازای هر کاربر،باید بیاید توی جدول tbl_auth_assignment یک رکورد مشابه رکورد زیر داشته باشیم
itemname : member
userid : 1
bizrule : return isset($params['users']) && $params['users']->allow('member');
?
و بعد توی مدل users یک متد داشته باشیم که به اسم مثلا allow که یک ارگومان داره که مقدار member در اینجا بهش داده شده که میره چک میکنه کاربر این نقشو داره یا نه ؟( در جدول users یک فیلد داریم به اسم role که مثلا مقدار member رو داره)

MMSHFE
دوشنبه 05 خرداد 1393, 14:59 عصر
بله یه چنین کاری باید انجام بشه. البته جزئیات دقیقش و اسامی role ها و... بستگی به پروژه شما داره.