راهنمای در مورد سطح دسترسی کاربران در Mvc
سلام
می خواهیم یک پروژه را در Mvc طراحی کنیم در مورد سطح دسترسی راهنمای می خواستم
فرض کنید در این پروژه ما یک admin اصلی داریم ویک سری admin دیگر هم داریم که این adminهای سری دوم به محدوده خاصی دسترسی دارند .
کلا می خواستم نظر مهندسان عزیز را در مورد تعیین سطح دسترسی و نحوه طراحی جداول ان را بدانم
باتشکر
3 پاسخ
سلام
مهندس فرض کنید
سطوح دسترسی را بصورت زیر بسازیم
از role استفاده نمیکنیم و می خواهیم براساس هر user این دسترسی را ایجادکنیم
فرض کنیم مثلا 100 کاربر که هر کاربر باکدملی شناسای میشود ومی خواهیم مشخص کنیم
الف) هر کاربر به چه صفحاتی دسترسی داشته باشد
ب) به چه دکمه های(ثبت ,ویرایش ,حذف و ویرایش) در یک صفحه دسترسی داشته باشد
باید چکار کنیم
باتشکر
سلام، وقت بخیر
تفاوتی نمی کنه، شما در هر صورت یکسری User دارید و یکسری Role ها که با یک رابطه Many to Many این Role ها رو به کاربرها ارتباط می دید. بعد موقع اجرای Action ها Role مورد نظر رو برای کاربر بررسی می کنید.
سلام،
در مورد تعیین سطح دسترسی داخل MVC شما می تونید:
- از زیرساخت Membership خود asp.net استفاده کنید
- یک ساختار Membership خودتون بنویسید.
بنده مورد دوم رو توصیه می کنم. برای Role ها، شما کاری که می کنید برای کاربرها داخل Database دسترسی ها رو ذخیره می کنید:
create table Roles ( [Id] int identity not null primary key, [Name] nvarchar(100) not null, [Title] nvarchar(200) not null ); go create table Users ( [Id] int identity not null primary key, [Username] nvarchar(200) not null, [Password] nvarchar(100) not null ); go create table UsersRoles ( [UserId] int not null references [Users]([Id]), [RoleId] int not null references [Roles]([Id]), primary key([UserId],[RoleId]) ); go
حالا موقع ورود به برنامه و همچنین Session_Start زمانی که اعتبارسنجی میشه کاربر Role ها رو داخل Principal اون کاربر ذخیره میکنید که میشه بوسیله متد IsInRole در خصوصیت User در HttpContext بررسی کرد که Role برای کاربر تعریف شده یا خیر:
if(User.IsInRole("admin"))
{
//
}
این مورد برای مواقعی هست که به صورت دستی باید دسترسی چک بشه، مثلاً داخل View ها، برای Action ها می تونید از Attribute ای با نام AuthorizeAttribute استفاده کنید. برای مثال:
public class UsersController : Controller
{
[Authorize(Roles="admin")]
public ActionResult EditUser(int id)
{
// implement logic
}
}
اگر نیاز به کنترل بیشتر بود می تونید یک Attribute بسازید که از AuthorizeAttribute ارث بری کرده و متد IsAuthorized رو override کنید.