تعیین دسترسی ادمین

[rtl]

من یه پروژه جدید باز کردم و لاگین رو بر مبنای یوزری که از داخل خود پروژه ساختم ایجاد کردم. الان که میخوام یوزرها رو مدیریت کنم خطای زیر رو میده این سطح دسترسی رو چطوری ایجاد کنم؟ یعنی یوزرم رو برای لاگین ادمین کنم که دسترسی داشته باشم[/rtl]


 You are not authorized to perform this action.


	public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view'),

				'users'=>array('*'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','update'),

				'users'=>array('@'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'users'=>array('admin'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}

[rtl]

انگار پیدا کردم ولی چطوری باید ازش استفاده بکنم؟

[/rtl]


$auth->assign('admin', 1);

[font="Tahoma"] [rtl]

assign که نوشتی برای زمانیه که شما از Role-Based Access Control استفاده میکنید.

ابتدا بایستی با کد مشابه زیر یک role درست کنید:

[/rtl]




$auth=Yii::app()->authManager;

$role=$auth->createRole('roleName');

[rtl]

(این کد رو معمولاً فقط یکبار در زمان ایجاد پروژه اجرا میکنید)

بعد اون role رو به کاربر مورد نظرتون نسبت بدید:

[/rtl]




$auth=Yii::app()->authManager;

$auth->assign('roleName','userName');

[rtl]

(این کار رو در زمانی که در مدیریت میخواهید دسترسی به کاربر اعطا کنید استفاده میکنید و دفعات بعد نیاز نیست)

سپس با کد زیر مشخص کنید که کاربرانی که دارای role با نام roleName هستند به اکشن های مورد نظر دسترسی داشته باشند.

[/rtl]




	public function accessRules()

	{

		return array(

				array('allow',

						'roles'=>array('roleName'),

						'actions'=>array('admin','delete'),


				),

				array('deny',

						'users'=>array('*'),

				),

		);

	}



[rtl]

در جاهای مختلف برنامه ما بین کدها هم اگر نیاز به چک کردن دسترسی کاربر بود به این روش میتونید کنترل کنید:

[/rtl]




if(Yii::app()->user->checkAccess('roleName'))

{

	// delete the post

}



[rtl]

توجه داشته باشید که Role-Based Access Control بر پایه یا فایل یا دیتایس عمل میکنه که لازمه قبلاً تنظیمات اون رو انجام داده باشید.

توضیح بیشتر:

http://www.yiiframew…-access-control

اینم یه اکستنشن مفید در این رابطه:

http://www.yiiframew…tension/rights/

روش بالا برای یک کار بزرگ و اصولی با سطح دسترسی های متنوع است که قابلیت امکان سطوح دسترسی Role, Task, Operation و Child های مربوطه را میدهد.

اما اگر پروژه خیلی کوچک است و ارزش استفاده از روش فوق را ندارد از روش مختصر و مفید Access Control Filter استفاده کنید که در همین حد خلاصه میشود که مشخص است:

[/rtl]




array('allow',

	'actions'=>array('publish'),

	'users'=>array('@'),

	'expression'=>'isset($user->role) && ($user->role==="editor")'

),



[/font]

[font="Tahoma"][font="Tahoma"][rtl][/font]توضیح بیشتر این روش:

http://www.larryullm…-control-lists/

[/font]

[font="Tahoma"][font="Tahoma"][/rtl][/font]

[/font]

[rtl]دست شما درد نکنه.

حالا اگه از این روش role base نخواهیم بریم چی.

یه راه ساده تر هم به نظرم هست. اگه اشتباه نکنم با filterها بود، دقیقا یادم نیست.

اون چیه؟

[/rtl]

[rtl][font="Tahoma"]معلوم شد کامل نخوندیش

یه بار از آخر به اول بخونش [/font][/rtl]

[rtl]این کد زیر رو کجا و چطوری بزارم. هر کاری میکنم میذارم صفحه سفید میشه[/rtl]


$auth=Yii::app()->authManager;

$role=$auth->createRole('admin','mahdi');

[rtl][font="Tahoma"]

بر پایه دیتابیس داری کار میکنی یا فایل؟

CPhpAuthManager or CDbAuthManager ?

یکی از اینا رو باید کانفیگ کرده باشی

[/font][/rtl]

[rtl]من دیتابیس یه یوزر دارم که ساختمش . یعنی بعد ایجاد پروژه داخل خود فرمی که ساختم یوزر درست کردم

[/rtl]

[rtl][font="Tahoma"]

منظورم پروژه خودتون نبود.

منظورم Role-Based Access Control بود که باید یا بر اساس فایل یا دیتابیس تنظیم بشه، لینک هر یک رو هم گذاشتم.

اگر در تنظیم هر یک مشکلی داشتی، اگر بلد باشم درخدمتم.

[/font][/rtl]