رفتن به مطلب

بهترین راه برای ایجاد سطوح دسترسی


پست های پیشنهاد شده

سلام

بهترین راه برای ایجاد اسکریپت php با سطوح دسترسی که کاملا جزیی هم باشه چی هست؟ اگر جوملا و درو\ال رو دیده باشید نمونه بارز این سوال من هست. ممنوت میشم راهنمایی کنید.

ویرایش شده توسط Anisi
لینک به ارسال

لینکهای زیر به شما کمک میکنه


http://www.tonymarston.net/php-mysql/role-based-access-control.html
http://www.sitepoint.com/role-based-access-control-in-php/

لینک به ارسال
  • 1 ماه بعد...

ممنون

به‌جاهای خوبی رسیدم. اما ی سوال:

اون بخش های حساب کاربری و سطح دسترسی رو که طبق روش role based که توضیح داده پیاده کردم ...

مشکل اصلی من در بخش جزئیات سطح دسترسیه، بویژه در بخش View-ها. به این صورت که مثلا ممکنه که یک فیلدی از یه فرم برای یه سری سطوح کاربری نمایش داده بشه و برای چندتا دیگه سطح کاربری نمایش داده نشه؛ یا مثلا بعضی متن‌ها و نوشته‌ها برای سطح کاربری مختلف متفاوت باشن.

اما همه سطوح کاربری به صورت داینامیک وارد می‌شن و به همین دلیل view-ها را نمیشه به صورت استاتیک تعریف کرد و با توجه به سطح کاربری نمایش داد.

راه‌حلایی که به ذهن مبارکم رسید:

- مثلا چند سطح کاربری (UserLevel) تعبیه کنیم و سپس اینگونه view هارا برای بخش های متفاوت طراحی و کدنویسی کنیم

منظور از UserLevel استفاده از چند سطح برای نمایش view ها با توجه به سطوح کاربری اصلی است...

- از روشی استفاده کنیم که دسترسی تک تک فیلد ها را در دیتابیس نوشته و سپس از طریق دسترسی و دیتابیس فیلد های خاص را نمایش دهیم...

- یک سری از سطوح کاربری که فکر میکنیم باید به طور ثابت در سیستم باشند را پیشفرض قرار داده و برای انها view ها مختلف تولید کنیم و باتوجه به سطح کاربری نمایش دهیم و همچنین در مدیریت امکان افزودن سطوح کاربری جدید هم باشد اما با view های پیشفرض.

- با توجه به توابعی که کاربر با آن ها دسترسی دارد و سطوج دسترسی به بخش های مختلف نیز از روی آن تعیین میگردد متوجه شویم سمت کاربر شویم : مثلا تنها سمتی که به تابع ارسال نظر بر روی طرح دسترسی ندارد دبیران هستند....و درنتیجه اگر کاربری به تابع ارسال نظر روی نامه که مثلا سطح کاربری فارغ از آنکه در مدیریت ، چه عنوانی در مدیریت برای سطح دسترسی وارد شده باشد میتوان نتیجه گرفت که مسئول مربوطه است و فیلد هایی که مسئول مربوطه با آن دسترسی دارد را نمایش داد.

- فیلد های عمومی را داشته باشیم.... برای همه نمایش میدهیم...ویژگی های خصوصی هم مثل سطح دسترسی به دیگران اختصاص میدهیم

امیدوارم قابل فهم گفته باشم!

ویرایش شده توسط Anisi
لینک به ارسال

معمولا وقتی عملیاتی میخواهد انجام بشه سطح دسترسی ها چک میشه و بسته به اون دسترسی عملیات انجام میشه

سطوج دسترسی به بخش های مختلف نیز از روی آن تعیین میگردد متوجه شویم سمت کاربر شویم

وقتی لایه view میخواهد خروجی رو ایجاد کنه بسته به دسترسی طرف میاد فیلدها رو تو خروجی قرار میده و نتیجه رو برای نمایش به سمت کاربر میفرسته

لینک به ارسال

معمولا وقتی عملیاتی میخواهد انجام بشه سطح دسترسی ها چک میشه و بسته به اون دسترسی عملیات انجام میشه

وقتی لایه view میخواهد خروجی رو ایجاد کنه بسته به دسترسی طرف میاد فیلدها رو تو خروجی قرار میده و نتیجه رو برای نمایش به سمت کاربر میفرسته

ممنون، این که درست!

ولی روش پیاده‌سازی این کار برای دیتابیس و شروطی که در کنترل باید بررسی بشه چی هست؟

یعنی باید از مدیریت دونه‌دونه فیلدها تعیین کرد که کدوم گروه کاربری یا کاربر به اون دسترسی دارن؟!

اگر نه معیار بررسی رو باید روی چی قرار داد؟

لینک به ارسال

معمولا به صورت دونه دونه جدا نمیشه

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

اگه داره و وارد میشه هر چیزی که قابل دیدن هست رو میبینه مثل گریدها و جدولها ولی موقع ویرایش یا حذف دسترسیش چک میشه و اگه دسترسی داشت تغییرات اعمال میشه

نمیدونم شما چه کاری میخواهید انجام بدید ولی معمولا یا یک سری نقش استاندارد تعریف میکنن مثلا مدیر-دبیر-دانش اموز و بر طبق این نقشها ویو ها ایجاد میشن و بسته به هر کدوم از این نقشها

گرید مناسب با اون در خروجی ویو رندر میشه

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

شما دقیقا بگید چه کاری میخواهید انجام بدید تا بهتر بشه نظر داد

لینک به ارسال

خوب اگر بخوایم به‌صورت پیش‌فرض یه‌سری نقش داشته باشیم، دوباره توی گرفتن کوئری‌ها و ایجاد محدودیت روی اونها باید توی بخش کنترلر برای هر گروه کاربری شرط بذاریم. بعدا اگر بخوایم یه نقش کاربری اضافه کنیم باید تمامی بخش‌ها از جمله ویوها و کنترل‌ها ویرایش بشن تا سطح دسترسی روی همشون اعمال بشه. نه؟!

لینک به ارسال

قصد من اینه که بتونم دسترسی‌ها رو کنترل کنم با شرایط زیر:

- بشه گروه‌های دسترسی رو از مدیریت کم و زیاد کرد

- امکان تغییر سطوح دسترسی برای هر گروه از مدیریت وجود داشته باشه

- view باتوجه به سطح دسترسی هر فرد ساخته بشه

- امکان اعمال محدودیت با توجه به سطح دسترسی کاربر در تمامی بخش‌ها از جمله کوئری گرفتن باشه

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

- هر کاربر در بخش‌ها و گزارشایی که می‌بینه، فقط رکوردایی که به خودش و واحد خودش مربوطه رو ببینه

مشکل از اینجا ایجاد میشه که تمامی گروه‌های دسترسی داینامیک هست و امکان این نیست که از چیزی تعیین بشه. مثلا تابعی که دسترسی فرد رو برای هر کوئری بررسی کنه و یا view رو ایجاد کنه.

با ثابت گرفتن یک تعدادی نقش، بازم سخت می‌شه و فکر کنم اصولی نیست که تمامی بخش‌ها (نمایش view، کوئری‌ها) رو به‌صورت دستی بررسی کنیم. مثلا قبل از نمایش هر منو و هر کوئری بذاریم:


is_admin()
{
echo '<li>افزودن کاربر</li>
}

یا


is_student()
{
$query="Select id, name, email from user where inserted_by = student"
}

ویرایش شده توسط Anisi
لینک به ارسال

خب شما یک بخش برای ایجاد سطح کاربری دارید و یک بخش برای مدیریت دسترسی

در قسمت مدیریت دسترسی شما باید فیلدهایی برای تمامی حالات و دسترسیهایی که مد نظرتون هست رو قرار بدید

مثلا دسترسی به فیلدهای بخش users

بعد دسترسی چیزهایی مثل منو-دسته بندی-برگه ها رو از داخل مدیریت منو -دسته بندی-برگه ها تنظیم میکنید مثلا یه لیست checkbox که لیست دسترسیها رو نشون بده و شما با تیک زدن مشخص کنید که کدوم نقشها دسترسی داشته باشن

بعد موقع سلکت یا موقع ساخت منو چک کنین که کدوم منوها باید تو لیست نمایش باشه مثلا id نقشهایی که دسترسی دارن رو به صورت serialize بریزین تو یک فیلد از جدول منو مثلا به اسم access خب اگه ایدی نقش کاربر 3 باشه حالا موقع سلکت زدن اینجوری مینویسین



select * from menu where access like '%,3,%'

چون سیستم که هوشمند نیست از دستورات پیروی میکنه مثلا دسترسی به صفحات استاتیک - دسترسی به فیلدها و ......

مثلا تو یه جدول با این فیلدها

id , role_id , role_name , role_value

که تمام دسترسیها درش ذخیره میشه

خب حالا چند تابع مینویسین که با اینها کار کنن

مثلا یه تابع برای دسترسی به صفحات استاتیک

یک تابع برای ایجاد کوئری

این کاری که شما میخواهید انجام بدید نیاز به کد نویسی زیاد داره باید روش زمان بزارید و کدنویسی کنید

لینک به ارسال

خیلی خیلی ممنون

پس فعلا نیمه‌استاتیک می‌نویسم، چون فرصت نیست و پروژه رو باید دی تحویل بدیم! اگر سوالی بود مزاحم می‌شم. :D

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...