PDA

View Full Version : امنیت و سطح دسترسی



sepehrforough
جمعه 29 فروردین 1393, 22:26 عصر
سلام ، من دارم یک cms طراحی میکنم و توی جدول asp_role نقش هارو ذخیره میکنم


ولی حالا واسه ورود به صفحات مختلف ، مثل مدیرت محتوا ، مدیریت کاربران ،


یه جدول دارم به اسم action که اسم دکمه ها یا به عبارتی فعلایت ها از قبیل خذف ، اضافه ، ویرایش توش هست ،
میخوام بدونه که نقش کاربر چیه ، و اینکه کدوم دکمه ها واسه کاربر فعاله ؟

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

میشه راهنماییم کنید ، که این نقش های نویسنده ، کاربر معمولی ، و ... رو هم باید تو جدول رول مشخص کنم؟

خواهشا با مثلا میشه راهنماییم کنید؟ چون واقعا مساله دارم توش

meysam99
شنبه 30 فروردین 1393, 00:19 صبح
نقش ها رو که همیشه تو جدول رول ذخیره میکنن. حالا شما یک جدول دیگر هم دارید برای نوع دسترسی به صفحه مثلا حذف و یا ویرایش که این رو هم میتوانستید در جدول رول ذخیره کنید.
سطح دسترسی کاربر رو هم موقع که بخواهید مشخص میکنی. مثلا اگه اجازه حذف داشته باشه دکمه مربوطه رو به آن نقش وصل می کنید.
ولی اگر می خواهید برای هر کاربر برای هر صفحه به صورت مجزا حذف و ویرایش را تعریف کنید به نظر من احتیاج به اون جدول دوم دارید

sepehrforough
شنبه 30 فروردین 1393, 09:37 صبح
مثلا اگه بخوام بگم کاربر تو نقش مدیریت محتوا ، نقش نویسندگی داره چی کار باید بکنم ، تروخدا منظورم اینه میشه با دستور راهنمایی کنید؟

sam166
شنبه 30 فروردین 1393, 14:17 عصر
من یه راهنمایی کلی میکنم
تو باید دو تا جدول اصلی و دو تا جدول میانی داشته باشی
جدول نام صفحات
جدول نام کنترل ها (مثل ثبت- افزودن – حذف - ویرایش)

جداول میانه :
یه جدول که در اون ایدی صفحه و ایدی کنترل وجود دارد و هر دو کلید اصلی

یه جدول دیگه که آیدی کاربر و آیدی صفحه و آیدی کنترل وجود دارد
حالا تو این جدول میانه میگی که کدو کاربر به کدو صفحه و کدوم کنترل های این صفحه دسترسی داره

sepehrforough
شنبه 30 فروردین 1393, 14:31 عصر
من دقیقا همین کارو کردم ، ولی مساله ام اینه ، که چه طوری وقتی رفتم مثلا تو صفحه ی مدیریت موضوع ، از رو جدول بفهمم الان آیدی این صفحه چیه ؟

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

elham70
شنبه 30 فروردین 1393, 14:54 عصر
برای سطح دسترسی اگه صفحه باشد خیلی راحته
توی یه جدول عنوان صفحات و ادرس اونها را نگه داری کن و توی یه جدول دیگه هم نقشها .
حالا یه جدول واسط باید طراحی کنی که ایدی جدول صفحات با ایدی نقش رو اونجا نگهداری کنی.
تو طراحی هم داخل مسترپیج یه کنترل منو ویه sqqldatasourceقرار بدی و به جداول وصلش کنی.
بعد هنگام لاگین کردن با توجه به نقش منو خودش عنوان صفحاتی که میتونه دسترسی داشته باشه رو لیست میکنه و برای هر ایتم منو هم با توجه به عنوانش مقدار یوارال رو ادرس صفحه قرار میده.
امیدوارم تونسته باشم منظورمو برسونم.

sepehrforough
شنبه 30 فروردین 1393, 15:03 عصر
مرسی ولی میشه راهنماییم کنی که آدرس رو تو چه فیلدی باید نگه دارم تو ساخت جدول؟

sepehrforough
شنبه 30 فروردین 1393, 15:04 عصر
میشه بگید تو جدول صفحه ، چه طوری میتونم آدرس صفحه رو ذخیره کنم و موقع ورود به صفحه چک بشه؟

sepehrforough
شنبه 30 فروردین 1393, 15:54 عصر
من نمیدونم چه طوری وقتی مرم تو یه صفحه به برنامه حالی کنم که الان تو صفحه مدیرت مختوایی
تا بعدش بیام رولشو چک کنم ، میشه بگید که تو جدول صفحه چه طوری آدرس رو ذخیره کنم؟

sam166
شنبه 30 فروردین 1393, 17:10 عصر
من دقیقا همین کارو کردم ، ولی مساله ام اینه ، که چه طوری وقتی رفتم مثلا تو صفحه ی مدیریت موضوع ، از رو جدول بفهمم الان آیدی این صفحه چیه ؟

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

خب شما یه تابع بنویس که دوتا پارامتر داره
پارامتر اول نام صفحه و پارامتر دوم اسم کنترل است
موقعی که مثلا صفحه لود میشه تو پیج لود این تابع رو فراخوانی میکنی و میگی اسم صفحم اینه و میخوام کنترل نمایش رو دسترسی بگیریم


if (HaveAccess(Page.Register, Access.Show) == false)
{
this.lblMessage.Text = Messages.Access;
return;
}

بعد این تابه به بانک اطلاعاتی و جدول میانه رجوع کرده و یه مقدار بولین بر میگردونه

elham70
شنبه 30 فروردین 1393, 18:03 عصر
مرسی ولی میشه راهنماییم کنی که آدرس رو تو چه فیلدی باید نگه دارم تو ساخت جدول؟

pageid-pagename-pageurl
مثال:1-مدیریت کاربران-~/usersmanagment.aspx
توی مشخصه های منو هم باید مشخصه ای که عنوان ایتمها هستش رو pagename و قسمت url هم pageurl بدی.

raziee
دوشنبه 01 اردیبهشت 1393, 00:49 صبح
با سلام
من خیلی با صفحه و نگهداری اون موافق نیستم.
ASP.NET بر پایه ی رویداد طراحی شده و شاید هدف اصلی از تولید این زبان برای برنامه نویسانی بود که تحت ویندوز برنامه مینوشتن و با مفاهیمی مثل رویداد کلیک آشنایی داشتند و ...
یک صفحه ممکنه چند عملیات مختلف رو پوشش بده.
زمانی که شما دارید یک CMS میکنیم پیشنهاد اول اینه که به جای اینکه از یک Page استفاده کنید بیاید بخش مورد نظر رو بیارید در یک UserControl و اون UserControl رو در صفحه Load کنید. اینجوری محدودیت صفحه از بین میره. حتی شما میتونیم تنها یک Page با نام Loader.aspx داشته باشید که وظیفه بارگذاری UserControl ها ی محتلف رو بر عهده داشته باشه و از قبل(زمان طراجی) نیاز نباشه که دقیقا بدونید چه UserControl هایی رو دارید(در واقع CMS شما دارای چه ماژول هایی هست) و بعدا با گسترش سیستم این ماژول ها هم افزایش پیدا کنه.


برای سیستم اعتبار سنجی پیشنهاد من استفاده از سیستم دسترسی به عملیات هاست.
کاربر دسترسی به عملیات x رو داره یا نداره.
به طور مثال:
شما ماژولی با نام اخبار دارید. که این ماژول شامل عملیات زیر هست

مشاهده اخبار
ایجاد خبر جدید
ویرایش خبر
ارسال پیشنویس خبر
تایید خبر
حذف خبر
آرشیو کردن خبر
و....


اگه هر کدوم از این عملیات ها دارای یک شناسه باشند(به طور مثال شناسه 1024 برای ثبت خبر ست) شما کافیه بررسی کنید که یک کاربر خاص (مثلا کاربر شناسه 1) دستری به کد 1024 رو داره یا نه. اگر داشت عملیات صورت بگیره.

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

sepehrforough
دوشنبه 01 اردیبهشت 1393, 09:25 صبح
من منظورتون رو متوجه شدم ، ولی سوالم اینه آیا تو هر صفحه ای ، مثلا صفحه مدیریت کاربری ، صفحه مدیریت محوتوا ، صفحه خبر ، صفحه زبان ، ....یکی یکی باید تمام اطلاعات جدول اکشن چک بشه ؟ تا ببینیم که در کل کاربر چه امکاناتی داره؟

raziee
دوشنبه 01 اردیبهشت 1393, 21:28 عصر
من منظورتون رو متوجه شدم ، ولی سوالم اینه آیا تو هر صفحه ای ، مثلا صفحه مدیریت کاربری ، صفحه مدیریت محوتوا ، صفحه خبر ، صفحه زبان ، ....یکی یکی باید تمام اطلاعات جدول اکشن چک بشه ؟ تا ببینیم که در کل کاربر چه امکاناتی داره؟
منظورتون از تمام اطلاعات جدول اکشن بشه رو متوجه نشدم.
شما یکسری عملیات در سیستمتون دارید. مثلا برای مدیریت کاربری عملیات ویرایش، حذف، تغییر نقش کاربری و ... رو دارید.
همینطور در قسمت های دیگه عملیات های مختلف دیگه رو.
کاربر a مجوز انجام این عملیات x,y,z رو داره.
مجوز های کاربر رو در زمان درخواست کاربر به عملیات مربوطه رو چک میکنید اگر دسترسی داشت عملیات رو انجام میدید اگر نه خطای دسترسی تولید میشه. جاهایی هم که قراره لینکی یا محتوایی براساس مجوز نمایش داده بشه ، مجوز های مربوطه رو بررسی میکنید و رفتار مناسبی رو نشون میدید.

حالا پیشنهاد من این بود که تمام مجوز های مربوط به کاربر رو گرفته و کش کنید و برای بررسی مجوز ها در هر بار به دیتابیس درخواست نفرستید و از RAM سرور بخونید.