-
Notifications
You must be signed in to change notification settings - Fork 0
Permission
این دسترسیها به دو مدل تعیین میشود اول دسترسیهایی است که خود کاربر به صورت مستقل آنها را دارد. دسته دوم دسترسیهایی است که کاربر به دلیل عضو بودن در یک گروه آنها را دارد.
از طرفی به دو مدل میتوان یک حق رو به یک نفر داد. روش اول این هست که به صورت مستقیم این حق رو به فرد انتصاب بدیم. در این روش یک گواهی به صورت کلی داده شده و کاربر این گواهی رو برای تمام موجودیتها دارد.
روش دوم تعیین گواهی بر اساس یک مدل دادهای دیگر است. برای روشن شدن مدل فرض کنید که در سیستم موجودیتی به نام کتاب وجود دارد و گواهی برای خواندن یک کتاب. زمانی که شما میخواهید یک کتاب را بخوانید باید یک گواهی کتاب خواندن داشته باشید که تنها برای کتاب مورد نظر کاربرد دارد. بنابر این دیگر مجوز خواندن سایر کتابها را ندارد. به این مدل مجوز، مجوز سطر میگوییم.
در حالت کلی یک مجوز به صورت یک رشته تعریف میشود که به صورت زیر است:
{Application id}.{Permission code name}
اگر مجوز از نوع مجوز سطر باشد، معمولا آن را به صورت زیر تعیین میکنند:
{Application id}.{Permission code name}#{Object type}(Object id)
مالک این مجوز کسی خواهد بود که مجوز برای آن در نظر گرفته شده است. برای نمونه یک کاربر میتواند مجوز زیر را داشته باشد:
Wiki.canRead#Wiki_Book(1)
بنابر این کاربر از نوع مشخص با شناسه مشخص مجوز خواندن یک کتاب با شناسه مشخص را دارد.
مجوز یک ساختار دادهای در سیستم است که دسترسیها به لایه نمایش را کنترل میکند
تمام انواع مجوزی که در سیستم وجود دارد به صورت مستقیم یا غیر مستقیم با یک مجوز در رابطه هستند.
کد زیر یک مجوز جدید را در سیستم ایجاد میکند.
// Install the permissions
$perm = new Pluf_Permission();
$perm->name = 'Project membership';
$perm->code_name = 'project-member';
$perm->description = 'Permission given to project members.';
$perm->application = 'IDF';
$perm->create();
معمولا ایجاد مجوزها در سیستم، در زمان راه اندازی اولیه سیستم ایجاد میشوند و تا پایان زندگی سیستم ثابت خواهند ماند. البته میتوان حالتی را تصور کرد که در طول زندگی یک سیستم،مجوزهایی جدید در سیستم تعرف شده و به کار گرفته شوند.
یک عنوان است که برای نمایش گواهی به کار گرفته میشود. این نام برای مفهوم بودن گواهی برای کاربران در نظر گرفته شده است.
این خصوصیت نیز برای توصیف مجوز برای کاربران در نظر گرفته شده است.
یک شناسه یکتا برای یک گواهی را تعیین میکند. برای نمونه اگر در سیستم شما چند کار متفاوت مانند خواندن، ویرایش کردن، و حذف کردن ممکن باشد میتوانید کدهای زیر را برای این گواهیهای آنها در نظر بگیرید:
- canRead
- canUpdate
- canDelete
کدهایی که برای مجوزها در نظر گرفته میشوند میتوانند در نرمافزارهای متفاوت یکسان باشند. از این رو در زمان ایجاد باید تعیین کرد که این مجوز مربوط به کدام نرم افزار است.
نمونههای زیر برای سیستم ویکی است:
- Wiki::canCreate
- Wiki::canRead
- Wiki::canUpdate
- Wiki::canDelete
مدل کلی مجوزها این امکان را میدهد که شما برای هر موجودیتی مجوز ایجاد کنید. در حالت کلی استفاده از مجوزها باید با پرسوجوهایی که در پایگاه داده انجام میشود تعیین شود.
مدل کاربر به عنوان یکی از پایین ترین مدلها ابزارهای مناسبی برای این کار ایجاد کرده است. در این بخش اول فراخوانیهای ایجاد شده برای کاربر را تعیین میکنیم و بعد از آن مدل کلی برای هر موجودیت خاص را تشریح خواهیم کرد.
برای گرفتن تمام مجوزهایی که یک کاربر دارد فراخوانی زیر در نظر گرفته شده است:
$usr->getAllPermissions($force)
خروجی این فراخوانی یک فهرست از مجوزها است که با ساختارهای رشتهای تعیین شده است. ساختارهای رشتهای این مجوزها در بخش اول تشریح شده است.
برای تعیین این که یک کاربر یک مجوز خاص را دارد فراخوانی زیر در نظر گرفته شده است:
$usr->hasPerm($perm)
$usr->hasPerm($perm, $object)
فراوخانی اول برای مجوزهای کلی است که در آن ورودی باید به صورت زیر باشد:
{Application id}.{Permission code name}
نمونه دوم تعیین میکند که آیا مجوز برای یک موجودیت خاص وجود دارد یا نه. برای نمونه توانایی خواندن یک کتاب به صورت زیر تعیین میشود:
$usr->hasPerm('Wiki.canRead', $wikiBook)
دادن یک مجوز کلی به یک کاربر تنها با ایجاد یک رابطه میان کاربر و یک مجوز به صورت زیر ایجاد میشود:
$perm = Pluf_Permission::getFromName('Wiki.canRead');
$usr->setAssoc($perm);
$usr->delAssoc($perm);
کلاس گواهی سطر دو فراخوانی عمومی برای مدیریت مجوزها ایجاد کرده است:
Pluf_RowPermission::add($usr, $book, 'Wiki.canRead');
Pluf_RowPermission::remove($usr, $book, 'Wiki.canRead');