PDA

View Full Version : تشخیص چکباکس های چک شده در ASP.NET Core



EnKamran
پنج شنبه 23 آذر 1396, 17:09 عصر
سلام.
من سه تا جدول ویک ویومدل دارم با فیلدهای زیر

Permissions : Id, Titl
Roles : Id, Name
RolePermissions : Id, RoleId, PermissionId
RolePermissionViewModel : RoleName(string) m List<Permission>
حالا میخوام تو ویو لیستی از Permission ها رو داشته باشم که به صورت چک باکس هستن
بعد کاربر بتونه هرکدوم رو خواست تیک بزنه یا تیکش رو برداره، اونور هم توی اکشن برنامه م اینه که بیام همه Permission هایی که مال این RoleId هستن رو حذف کنم و دوباره Permission های انتخاب شده رو اینسرت کنم.
تو ساخت ویو خوب من میام یک لیست کامل از جدول Permissions رو لود میکنم و با foreach میام input هایی از نوع چکباکس میذارم تا اینجا حله
حالا میخوام اونهایی که از قبل آی دی شون توی جدول RolePermission واسه این رول وجود داره تیک بخوره، اینم فکنم بشه داخل خود ویو یه foreach دیگه بذارم که هر اینپوتی که داری میسازه اگر توی لیست RolePermissions بود تیک بزنه نبود نزنه
حالا مشکل اصلی اینه که خوب کاربر اومدو تیک زد و تیکهایی روهم برداشت، میخوام بفرستم به اکشن و اونجام سیو کنم توی جدول RolePermissions اینجا باید چیکار کنم؟اصلا چه لیستی رو توی فرم باید سابمیت کنم و اونور چطور بهش دسترسی داشته باشم؟

RIG000
جمعه 01 دی 1396, 22:16 عصر
احتمالا مشکل شما اینطوری که من فهمیدم اینه که شما یه ۱۰ ایتم به طور مثال داری برای اولین بار ۵ ایتمش تخصیص داده شده است و سپس بعدا در زمان modifyمیخای بهش تغییرات اعمال کنی یکی از ۵ تا رو برداریو سه تا رو جدید اضافه کنی. این یعنی ۸ ایتم که ۴ ایتم در جای خود باقی میمونن و ۱ ایتم حذف میشه و ۳ ایتم اضافه میشه . شما این رو در زمان اپدیت باید انجام بدید و احتمالا بسته به repository‌شما ممکن هست هنگام commit‌کردن به خطا بخوری که در کانتکست شما این ریپوزیتوری نیست و از این قبل که معتبر سازی نمیکنه مقادیر رو . که شما باید این رو درست انجام بدی و شدنی هست. درنهایت شما این ایدی های permission‌رو در دیتابیس ذخیر ه میکند - یک راه دیگه ذخیره سازی شما اینه که وقتی به سمت بک اند رفتی باید تمام permission های مربوطه به این Role رو حذف کنید و سپس این موارد جدید رو که ۷ ها هستند رو مجدد جدید اضافه کنید یعنی هرباز پاک و ثبت به نوعی این موضوع مشکلی ندارد به هیچ وجه جز اینکه شما بخاین مثلا تاریخ اعمال این permission مثلا create date time اون براتون مهم باشه . (ارتباط شما بدرستی یک به چند هستش و چند به چند و یا اصطلاحا جانکشن نیست پس از شما توقع میره که کمی دقت کنی و خودت بیشتر بهش نگاه کنی متوجه میشی .) در هر صورت از اینکه permission base هم کار میکنی خوبه چون خیلی ها با Role base کار میکنند و این به تجربه شما اضافه میکند. موفق باشید

leilast
یک شنبه 03 دی 1396, 18:49 عصر
ببخشید میشه توضیح بدین چه جوری به جای role با permission کار میکنید؟
(منظورم اینه که چه جوری محدودیت ها دسترسی رو با این روش اعمال میکنید)
اگر آموزشی هم در این زمینه دارید میشه اینجا بذارید؟
من هم دقیقا این کار و باید انجام بدم اما پلنی براش ندارم.

RIG000
سه شنبه 05 دی 1396, 09:23 صبح
ببخشید میشه توضیح بدین چه جوری به جای role با permission کار میکنید؟
(منظورم اینه که چه جوری محدودیت ها دسترسی رو با این روش اعمال میکنید)
اگر آموزشی هم در این زمینه دارید میشه اینجا بذارید؟
من هم دقیقا این کار و باید انجام بدم اما پلنی براش ندارم.از این می تونی استفاده کنی

[HttpGet]
[Authorize(Policy = PermissionEnum.PERSON_LIST.ToString())]

در نهایت این سایت ها رو ببین
https://jacopretorius.net/2010/01/permission-based-access-in-asp-net-mvc.html
https://www.codeproject.com/Articles/875547/Custom-Roles-Based-Access-Control-RBAC-in-ASP-NET
https://stackoverflow.com/questions/36445780/how-to-implement-permission-based-access-control-with-asp-net-core