مدیریت نقش ها و سطوح دسترسی با پکیج ENTRUST

3 سال پیش
توسط pedi آپدیت شد
captan ( 1176 تجربه )
3 سال پیش

درود
برای مدیریت نقش ها و سطوح دسترسی پیشنهاد می کنید از اول ، نوشته بشه یا اینکه پکیج هایی مثل ENTRUST کارایی لازم رو دارن ؟
آیا با این پکیج کار کردید ؟

حسام موسوی ( 365256 تجربه )
3 سال پیش
تخصص : طراح و برنامه نویس

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

pedi ( 11026 تجربه )
3 سال پیش

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

captan ( 1176 تجربه )
3 سال پیش

سپاس
آقای Pedi منظورتون از اینکه احتمالا به مشکل میخوری چیه دقیقا ؟ دقیقا چه مشکلی ؟

pedi ( 11026 تجربه )
3 سال پیش

منظورم مشکلی نیست که نشه حلش کرد.
فرض کنید شما سه تا رول دارین با اسم های user , admin, writer :
حالا هروقت خواستین چک کنید که کاربر مئلا ادمینه یا نه، اینجوری چک میکنید:

$user->hasRole('admin');

خب این رشته ی 'admin' از همون فیلد name از جدول roles گرفته شده دیگه. تا اینجا مشکلی نیست. حالا فرض کنید سیستم داینامیک باشه و شما بعدا بخواین تحت یک فرم (داخل ویو) یک نقش چهارمی هم اضافه کنید به نام مئلا reader که فقط میتونه پست هارو ببینه. خب شما فیلد name این نقش رو هم میذارید reader. اما... داخل سیستم که هیچ شرطی نذاشتین که اگه فلان کاربر نقش reader داشت میتونه فلان کارو بکنه! اینجاست که Entrust کم میاره. و اما راه حل:
داخل جدول roles باید یک فیلد type اضافه کنید که enum باشه و مقادیرش از قبل تعریف شده باشن مثلا: user, admin, writer, reader .
حالا وقتی تو سیستم میخای نقش جدید تعریف کنی باید نوعشم تعریف کنی که ماهیت کلی این نقش چطوری باشه.
حالا دیگه باید شرط هاتو اینجوری تعریف کنی که اگه هرچنتا هم نقش جدید تعریف شد، وابسته به فیلد name نباشه و به type وابسته باشه:

        if( $user->roles()->where('type', 'admin')->exists() )
            // user has admin role...
        else
            // user doesn't have admin role...

خیلی پیچیده شد! امیدوارم متوجه شده باشی

برای ارسال پاسخ باید وارد سایت شوید