Yii Framework Forum: permission user - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

permission user

#1 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 01 October 2011 - 09:30 AM

سلام ، ممنون میشم در مورد سطح دسترسی کاربران توضیحاتی بدید

یادمه که جناب علی برجیان یک سری صحبتها در ایم مورد کرده بود ، ممنون میشم دوستان توضیحاتی همراه با مثال قرار بدن که مثلاً ما چند مدل سطح دسترسی تعریف میکنیم و برای هر کاربر بسته به نوع سطح دسترسی اطلاعاتی رو نمایش میدیم

مثلاً حالا شما سطح دسترسی در این سیستم شبکه اجتماعی رو در نظر بگیرید

0

#2 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 01 October 2011 - 03:54 PM

اساتید عزیز این بخش واقعاً جای بحث و یادگیری داره چون من تا میتونستم جستحو تو فروم و گوگل زدم اما تا الان هیچ نتیجه ای نگرفتم

لطف کنید توصیحاتی بدید و جند نمونه هم مثال بزنید

0

#3 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 369
  • Joined: 19-January 11

Posted 02 October 2011 - 12:13 AM

View Postabedi98, on 01 October 2011 - 03:54 PM, said:

اساتید عزیز این بخش واقعاً جای بحث و یادگیری داره چون من تا میتونستم جستحو تو فروم و گوگل زدم اما تا الان هیچ نتیجه ای نگرفتم

لطف کنید توصیحاتی بدید و جند نمونه هم مثال بزنید




سلام . ببخشید من چند روزی فرصت نکردم پاسخ بدم.
متد accessRules در کنترلر وظیفه دارد که حدود دسترسی را برای انواع کاربران مشخص کند روشهای کنترل دسترسی بسیار متنوع و جالب هستند.
این متد فیلترهای دسترسی کاربر به اکشن های کنترلر را مشخص می کند. به عنوان مثال مشخص می کند که کدام کاربر مجاز به اجرای کدام اکشن می باشد یا نمی باشد.

برای این که هر کاربری نتواند با وارد کردن هر آدرسی وارد آن صفحه شود از این قسمت استفاده می شود. مثلا کاربری که وارد سایت نشده یعنی login نکرده نمی تواند کنترلر Post را اجرا کند.

برای هر یک یا چند اکشن می توان یک آرایه جدا تشکیل داد و نحوه دسترسی کاربرانی که می توانند از آن استفاده کنند را مشخص کرد.
از کاراکتر * برای معرفی کردن همه کاربران و از کاراکتر @ برای معرفی کاربرانی که وارد سایت شده اند استفاده می کنیم همچنین از علامی ؟ برای کاربران ناشناس استفاده می شود. هر مدخل آرایه برای این متد به شکل زیر تعریف می شود :


array('deny or allow',   'actions'=>array('action1','action2',…),   

   	'users'=>array('@ or *')

  ),

  

ابزار gii در استفاده از ابزار Crud generator باعث می شود که مدخلی با شکل زیر ایجاد می کند که برای اجرای اکشن های کاربر باید آن را اصلاح نمود وگرنه اکشن های کاربر اجرا نخواهند شد.
  array('deny',  // deny all users

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

  ),

  



در این اکشن همچنین می توان پارامترهای دیگری مثل Ip, Roles, Controllers, Verbs, Expression و غیره را نیز استفاده کرد به عنوان مثال از Ips می توان استفاده کرد تا کاربرانی با Ip مشخص اجازه استفاده از سایت را داشته باشند یا نداشته باشند. برای مدیریت گروهها نیز از Roles استفاده می شود که برای توضیحات بیشتر به ویکی پدیا بخش RBAC مراجعه نمایید.

روش دیگر این کار تعریف یک شرط است مثل:





  

array('allow', 

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

        	'expression'=> 'Yii::app()->user->group == 3',



2

#4 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 02 October 2011 - 02:25 AM

سلام مرسی جناب برجیان متوجه میشم در مورد توضیحاتی که دادید اما متاسفانه نمیتونم ازش استفاده کنم

اگر میشه لطف کنید اول از همه بگید این ماژول رو چجوری نصب کنیم و بعد اینکه چجوری ازش استفاده کنیم و یک مثال کوچیک رو به عنوان یک پروژه باهاش انجام بدید

چون واقعاً خیلی خیلی جستجو کردم اما به نتیجه ای نرسیدم

0

#5 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 369
  • Joined: 19-January 11

Posted 02 October 2011 - 03:00 AM

View Postabedi98, on 02 October 2011 - 02:25 AM, said:

سلام مرسی جناب برجیان متوجه میشم در مورد توضیحاتی که دادید اما متاسفانه نمیتونم ازش استفاده کنم

اگر میشه لطف کنید اول از همه بگید این ماژول رو چجوری نصب کنیم و بعد اینکه چجوری ازش استفاده کنیم و یک مثال کوچیک رو به عنوان یک پروژه باهاش انجام بدید

چون واقعاً خیلی خیلی جستجو کردم اما به نتیجه ای نرسیدم





خوب اگه علاقه مند به استفاده از RBAC هستید می تونید از اینجا توضیحات کاملش رو دنبال کنید که همه موارد رو با دقت توضیح داده.
این روش مسلما بسیار کامل و امن هستش
اما من توی پروژه هام از این روش استفاده نمی کنم بلکه گروههای کاربری رو جداگانه تعریف می کنم و با یک شرط ساده در AccessRule اونا رو مدیریت می کنم.
یک مثال ساده :

	public function accessRules()
	{
	$staff = Staff::model()->findByPk(Yii::app()->user->id);
	$p = $staff->permission;
   
    	return array(
        	array('allow', 
            	'actions'=>array('view','index'),
            	'expression'=> $p->staff.' > 1',
        	),
        	array('allow',
            	'actions'=>array('create','update'),
            	'expression'=> $p->staff.' > 2',
        	),
        	array('allow',
            	'actions'=>array('delete'),
            	'expression'=> $p->staff.' > 3',
        	),
        	array('deny', 
            	'users'=>array('*'),
        	),
    	);
	}


در این مثال ابتدا یک کاربر جاری رو که id اون به شکل Yii::app()->user->id قابل دسترسیه از جدول/مدل Staff فراخوانی کرده ایم
در کد بعدی یعنی $p = $staff->permission; متغیر $p فیلد permission این کاربر رو از جدول فراخوانی میکنه و در $p قرار می ده
کد 'actions'=>array('view','index'), مشخص می کنه که می خوایم اکشن های index و view رو مشخص کنیم
و در ادامه کد 'expression'=> $p->staff.' > 1', مشخص می کنه که اگر مجوز این کاربر $p عددی بزرگتر از 1 باشه این کار انجام بشه

خوب این یک مثال بسیار ساده است
ما می تونیم برای شبکه های اجتماعی که مورد نظر شماست برای هر قسمت یک فیلد جداگانه مثل permission1 - permiassion2 - .... تعیین کنیم
و در هر کنترلی که لازمه بررسی کنیم آیا این کاربر مجوز استفاده از این قسمت رو داره یا نه



1

#6 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 02 October 2011 - 07:24 AM

خوب جناب برجیان معمولاً اینکه بخوایم واسه هر قسمت یک فیلد تو دیتابیس داشته باشیم کار درستی نیست

شما مثلاً سطح دسترسی کاربران فیسبوک را در نظر بگیرید اگر میخواست همچین کاری انجام بده الان منفجر میشد .

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

اگر ایده ای برای این قسمت دارید منمون میشم راهنمایی کنید و یا اینکه با ماژول های RBAM یا Rights میشه این اهداف رو بهتر از accessRule خود yii انجام داد ؟

0

#7 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 02 October 2011 - 02:19 PM

جناب برجیان من میخوام سطح دسترسی کاربران رو ریز کار کنم یعنی بتونم به هر صفحه یا هر چیزی دسترسی بدم یا ندم

مثلاً کاربر Saman بتونه مطلب بلاگشو رو برای دوستانش فقط باز بزاره و یا فقط برای کسانی که خودش انتخاب میکنه باز بزاره

شما همین accessRule خود Yii رو پیشنهاد میکنید !؟

0

#8 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 369
  • Joined: 19-January 11

Posted 02 October 2011 - 11:31 PM


البته که نمی شه برای هر چیز کوچیکی یک سطح دسترسی تعریف کرد من هم چنین منظوری نداشتم.اگه سوال شما فیس بوک باشه مسئله به این شکل قابل حله :
در جدول permission گروههای مطالب مشخص می شه و برای هر کاربر یک عدد به عنوان مجوز در نظر گرفته می شه. مثال


Permission Table
-------------------------
userId
------Profile----------Setting---------------Wall----------------Groups----------Causes------------Applications
1---------------2
------------------1---------------------3-----------------------1-------------------0---------------------2
2
---------------3------------------3---------------------2-----------------------0-------------------1---------------------2


و شرایط رو اینجوری تعریف می کنیم


0= deny
1 = view
2=edit/create
3=delete/admin


حالا می بینیم که مثلا کاربر 1 حق دسترسی و مشاهده Causes رو نداره ولی روی wall خودش حق دسترسی نامحدود یعنی 3 است
و به همین ترتیب برای بقیه
در مورد پیامهای سیستم و یا پست ها سطح دسترسی روی خود همون رکورد ذخیره می شه مثلا


Post Table
--------------
id----------title------------------content---------------------status
1----------Hello---------------Hello World-----------------------1
2----------Welcome---------Welcome User-------------------2


که status به شکل زیر تعریف می شه

Status :
0 = Inactive
1= Just Owner
2 = Just Friends
3 = Public Show

این مقادیر طبیعتا طبق نظر برنامه نویس مشخص می شوند.
اما اگر بخوایم حالت داینامیک کار رو بیشتر کرده باشیم می تونیم جدول permission رو به شکل زیر تعریف کنیم


Permission Table
------------------------
id----------userId-----------Permission------Value
1------------1--------------- Application -----3
2
------------1--------------- Wall----------------1
3
------------1--------------- Causes------------2
4
------------2--------------- Wall----------------2
5
------------2--------------- Groups------------0


مزیت این روش اینه که جدول 1-چند permission اجازه می ده در آینده هر Permission جدیدی اضافه شد بدون تغییر ساختار جداول اونو اضافه کنیم.





1

#9 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 02 October 2011 - 11:46 PM

بسیار بسیار ممنون خیلی لطف کردید
0

#10 User is offline   mosi 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 14
  • Joined: 28-April 11

Posted 11 July 2012 - 11:30 PM

salam
zamani ke ma haghe dastresi ijad mikonim agar karbar varede site nashode bashe ona mifreste be site/login
hala age bekhaym ona redirect kone be admin/login bayad che kar anjam bedim?
0

#11 User is offline   Mahmood3D 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 22
  • Joined: 03-June 13
  • Location:Iran

Posted 09 June 2013 - 12:47 AM

به نظر بنده بهترین راه استفاده از RBAC هست که هر مجوزی که بخواین رو میتونین به صورت کاملا داینامیک تولید کنین و ازش استفاده کنین

0

#12 User is offline   srm 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 26-May 13

Posted 05 July 2013 - 05:52 AM

salam aghaye jaberiyan
man ghesmate RBaC ra khundam vali tozihat darbare auth.php vanahve ijadesho nafahmidam, yan nemitavan be tore mamul ba eclips ye file php tu folder data ijad kard va code gofteshe shode ra unja nevesht?
man kolan nemidunam chetor bayadin file auth.php ra ijad kard?
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users