"> پیاده سازی سطح دسترسی کاربر در پروژه به زبان سی شارپ

پیاده سازی سطح دسترسی کاربر در پروژه به زبان سی شارپ

سطح دسترسی

این مقاله در رابطه با پیاده سازی سطح دسترسی کاربران در پروژه به زبان سی شارپ می باشد که دسترسی کاربران به صفحات را مدیریت می کند. در این پروژه از Linq برای EntityFramework استفاده می کنم. تنها کافیست که دسترسی ها را به نقش ها (Roles) اضافه کنید و نقش ها را به کاربران. سورس پروژه نیز در ادامه ی مطلب برایتان قرار داده شده است …

سطح دسترسی

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

btn1.Visible = PermissionControl.CheckPermission("Install");
btn2.Visible = PermissionControl.CheckPermission("UnInstall");

جدول های سطح دسترسی

سطح دسترسی سفارشی

در دیتابیس دسترسی ۵ جدول داریم:

Users: ذخیره کردن اطلاعات کاربران

Roles: ذخیره کردن نقش ها

Permission: دسترسی ها را مدیریت می کند و ۲دو اسم برای دسترسی دارد، اولی Permission Title می باشد برای نمایش دادن به کاربران و دومی Constant name است که برای کد نوشتن استفاده می شود، مانند کد بالا.

Users Roles: نقش کاربران را ذخیره می کند. هر کاربر می تواند بیش از یک نقش داشته باشد.

Role Permissions: دسترسی ها را برای هر نقش ذخیره می کند.

استفاده از کد

در این فصل نحوه کار با آن را توضیح می دهم:

ابتدا دو نمونه از این مجموعه ها ایجاد کنید.

privatestaticreadonlyHttpSessionState Session = HttpContext.Current.Session;
privatestaticreadonlyHttpApplicationState Application = HttpContext.Current.Application;

Session برای هر کاربر می باشد و اپلیکیشن برای همه کاربران می باشد.

در قسمت های بعد، بیشتر با آنها آشنا میشوید.

سپس یک متود با نام CheckPermission ایجاد می کنید که فقط نیاز به عبور ازPermissionConstantNameدارید.

publicstaticbool CheckPermission(string PermissionConstantName)
<pre>{ 
bool result = false; 
// Is current visitor logged in?
if (!HttpContext.Current.User.Identity.IsAuthenticated)
    { 
returnfalse;
    } 
string Username = HttpContext.Current.User.Identity.Name; 
//if in user permissions you make changes, you have to clear his permission list
if (Application["AffectedUsers"] != null)
    { 
var AffectedUsers = (List<string>) Application["AffectedUsers"];
if (AffectedUsers.Contains(Username))
        {
            Session["PermissionList"] = null;
            AffectedUsers.Remove(Username);
            Application["AffectedUsers"] = AffectedUsers;
        } 
    } 
    Users CurrentUser = 
        (from user in DataContext.Context.Users where user.Username == Username select user).
            SingleOrDefault(); 
//return True because SuperAdmin has all the permissions!
if (CurrentUser.IsSuperAdmin)
    { 
returntrue;
    } 
if (Session["PermissionList"] == null)
    {
        List<string> PermissionList = (from p in DataContext.Context.Permissions
join rp in DataContext.Context.RolePermissions on 
                                       p.PermissionID
                                           equals
                                           rp.PermissionID
join r in DataContext.Context.Roles on rp.RoleID 
                                       equals r.RoleID
join ur in DataContext.Context.UserRoles on r.RoleID 
                                           ur.RoleID
where ur.UserID == CurrentUser.UserID
select p.PermissionConstantName).Distinct().ToList(); 
        Session["PermissionList"] = PermissionList; 
        result = PermissionList.Contains(PermissionConstantName);
    } 
else
    { 
var PermissionList = (List<string>) Session["PermissionList"]; 
        result = PermissionList.Contains(PermissionConstantName); 
    } 
return result; 
}

وقتی که این کد را در متود خود فرا خواندید، متود از HttpContext برای پیدا کردن کاربر استفاده می کند و بررسی می کند که آن کاربر اجازه دسترسی دارد یا خیر.

اجازه دسترسی این کاربر در یک لیست در session جمع آوری می شود.

لیست کاربران تحت تاثیر (Affected):

وقتی شما دسترسی نقش را تغییر می دهید، بدین معنا می باشد که کاربر فعلی دیگر اجازه دسترسی به آن صفحه یا شئ را ندارد، و اگر کاربر در آن لیست موجود باشد، باید permission return false را بررسی کنید.

یکی از ویژگی های خوب کنترل دسترسی این است که نیازی به ورود و خروج دوباره برای اعمال تغییرات انجام شده روی کاربر ندارد.

اگر کاربر یک سوپر مدیر (SuperAdmin) باشد، بدین معناست که اجازه دسترسی به همه ی object ها را دارد.

مدیریت دسترسی نقش ها

فقط به یک کنترل gridview ، برای نشان دادن نقش ها نیاز دارید، و به یک لیست checkbox برای دسترسی ها.

مدیریت کاربران

به یک gridview برای نمایش اطلاعات کاربران و چند text boxبرای نقش های موجود نیاز دارید.

چگونه می توانم از این در پروژه فعلی خود استفاده کنم؟

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

با این روش از کلاس، استفاده کنید:

<asp:LinkButtonID="lbConfigure"runat="server"CommandName="Configure"CommandArgument='<%# Eval("AdminFilePath") %>' Visible='<%#PortalCommon.PermissionControl.CheckPermission("ModuleConfig") %>'>Install module</asp:LinkButton>

یا در code behind:

btn1.Visible = PermissionControl.CheckPermission("Install");
LinkButton1.Visible = PermissionControl.CheckPermission("UnInstall");

اگر می خواهید پروژه من را تست کنید، Connection String را تغییر دهید و cp.edmx را در پوشه Model باز کنید روی فصای سفید بین جدول کلیک راست کنید و Generate database from model را انتخاب کنید و این script را در دیتابیس خود اجرا کنید، از PermissionManager page برای ایجاد نقش جدید استفاده کنید.

موفق باشید !

  • پسورد: www.mspsoft.com
داریوش فرخی

داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    فرشید علی اکبری پاسخ

    سلام
    من چون به تازگی MVC رو شروع کردم میخوام بدونم چطوری میشه این پیاده سازی رو در MVC انجامش داد؟ آیا با پیادده سازی Identity در پروژه ام این مورد هم کاور میشه؟

    با تشکر از شما.

      مسعود شریفی پاسخ

      MVC امکانات زیادی داره که خیلی در مورد سطح دسترسی در MVC نیز حتما مقاله ای را آماده میکنیم.

    علیرضا حسن زاده پاسخ

    سلام: زحمات زیادی کشیدید ممنونم از شما ،اگر ممکن است سورس برنامه را برای بنده ایمیل کنید ممنون میشم . قبلا از لط شما کمال تشکر را دارم .

    احسان پاسخ

    مرسی

    َآرش پاسخ

    سلام
    من فیلم در مورد سطح دسترسی را نتوانستم ببینمنم و دانلود کنم . آیا امکانش هست آن را برایم ارسال کنید
    ضمناً اگر برنامه سطح دسترسی را در دلفی دارید ممنون می شوم برایم ارسال کنید چون من با دلفی کار می کنم
    ممنون می شوم مرا راهنمایی کنید