بدست آورد role در RBAC

[rtl][right]سلام

من برای ساخت RBAC طبق این

http://www.yiiframework.com/doc-2.0/guide-security-authorization.html

پیشرفتم من در اینجا چندتا role ساختم مثل

admin user editor support

حالا من می خوام مثلا ادیتور و یوزر role های پیشفرض باشند

یعنی کاربر زمان ثبت نام بتونه انتخاب کنه که یا یوزر باشه و یا ادیتور

ممنون میشم اگه منو راهنمایی کنید[/right][/rtl]

[size="3"][font="Tahoma"][right]

اگه میشه بیشتر توضیح بدید که کدوم قسمت براتون مبهمه؟

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

این کدیست که در همون منبع وجود داره

[left]




public function signup()

{

    if ($this->validate()) {

        $user = new User();

        $user->username = $this->username;

        $user->email = $this->email;

        $user->setPassword($this->password);

        $user->generateAuthKey();

        $user->save(false);


        // the following three lines were added:

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

        $authorRole = $auth->getRole('author');

        $auth->assign($authorRole, $user->getId());


        return $user;

    }


    return null;

}



[/left][/right][/font][/size]

[rtl][right]سلامممنون . من می خوام مثلا دوتا نقش رو از کل نقش هام فراخونی بکنم و کاربر موقع ثبت نام انتخاب بکنه مثلا یه dropdown list باشه که کاربر موقع ثبت نام انتخاب کنه که کدوم نقش رو می خواد[/right][/rtl]

[font="Tahoma"][size="3"][right]خوب شما سناریو را که دارید. ابزارهای آن هم که فراهمه. در واقع این یک کار عادی است که میشه از 30 روش ممکن و 20 روش غیرممکن آنرا انجام داد. شما اگر میدانید که چطور از فریمورک استفاده کنید براحتی میتوانید این سناریو را پیاده سازی کنید. در غیر این صورت ابتدا روش کار با فریمورک را یاد بگیرید.

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

با همه این حرفها اگر انتظار دارید یک نفر برای شما برنامه نویسی کند من فرصت ندارم و عذرخواهی میکنم ولی میتوانید منتظر بمانید تا کسی پیدا شود و این کار رابرایتان انجام دهد.[/right][/size][/font]

[rtl][rtl]سلامراستش من تازه واردم و زیاد با این فریم ورک کار نکردم ولی من نخواستم کسی کدش رو بنویسه اگه دقت کرده باشی گفتم راهنمایی کنینبا این حال باز از راهنمایی شما تشکر می کنم من برای اون مشکل یه فیلد دیگه به جدول یوزر اضافه کردممثلا user_type مقدار های نقش ها مو به اون اختصاص دادم[/rtl]تغیراتی که دادم[/rtl]


$user->user_type = $this->user_type;

[rtl] و قسمت نقش دادن به کاربرا به این صورت شده[/rtl]


$authorRole = $auth->getRole($user->user_type);

[rtl]حالا سئوال من اینه که آیا این کار که من انجام دادم یعنی یه فیلد اضافه کردم خوبه ویا روش بهتری نسبت به این کار هستچون خودم تمایل داشتم بدون اضافه کردن فیلد به جدول یوزر اینکارو انجام بدم[/rtl]

[size="3"][font="Tahoma"][right]اگر از جداول خود فریمورک برای

RBAC

استفاده میکنید جدول

auth_assignment

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

مشکل شما با تغذیه درست

Dropdown

حل میشود.

بطور مثال میتونید یک متد به این شکل در مدل کاربر تعریف کنید

[left]


public function getDefaultRoles()

{

 return [

          'user' => 'user',

          'editor' => 'editor',

];

}

[/left]

و هم برای تغذیه

Dropdown list

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

Validation

هم میتونید استفاده کنید که مطمئن شوید اگر کسی خواست مقادیری غیر از آنچه مجاز است در دیتابیس فرو کند نتواند.

برای ساختن لیست مورد نظرتون در فرم هم میتونید از

HTML helper

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

[left]


Html::dropDownList('list', $currentUserRole, $user->getDefaultRoles())

[/left]

که چون اکتیو نیست باید در سناریوی آپدیت - یعنی وقتی مدل از قبل وجود دارد - مقدار اولیه بگیرد .[/right][/font][/size]

[size="6"][rtl]ممنون از راهنماییت[/rtl][/size]