PDA

View Full Version : حرفه ای: تعیین سطح دسترسی کاربران در سطح سند در نرم افزار آرشیو اسناد



aria2006
یک شنبه 01 آذر 1394, 17:56 عصر
با سلام
دوستان من یک نرم افزار آرشیو اسناد دارم که ازم خواستن سطوح دسترسی کاربران را بر اساس عناوین اسناد فراهم کنم. مثال ما در این نرم افزار یکسری عناوین از پیش تعریف شده برای اسناد داریم مثل حکم پرسنلی، تسویه حساب، گواهی اموزش و .... حالا میخوام مثلا فلان کاربری که با این نرم افزار کار میکنه و ادمین هم نیست اگه اومد یه گزارشی گرفت مثلا بجز بقیه اسناد، نتونه حکم پرسنلی رو ببینه و یا در هر فرم دیگر که اسناد قابل دسترسی و مشاهده هستن.... میخواستم بدونم دوستان ایده خاصی در مورد پیاده سازی این نوع از سطح دسترسی را دارند ؟:لبخندساده:

abdullah20
یک شنبه 01 آذر 1394, 18:09 عصر
خب مگه اینها هر کدوم داخل یک بخش نیستند؟

aria2006
یک شنبه 01 آذر 1394, 18:24 عصر
خب مگه اینها هر کدوم داخل یک بخش نیستند؟
سلام. دقیقا منظورتونو نگرفتم ولی نام و کد عناوین اسناد همه در یک جدول هستن که در بخشهای مختلف از اون جدول استفاده میشه.

abdullah20
یک شنبه 01 آذر 1394, 18:29 عصر
خب به شکل؟ یعنی عناوین داخل یک کومبوباکس لود میشن بد کاربر انتخاب میکنه بیشتر توضیح بدید

vb341
یک شنبه 01 آذر 1394, 18:31 عصر
برای هر کدوم از عناوین یک فیلد از نوع bit تعریف کن و برای هر یوزر اون رو ست کن . د رنهایت در هنگام فراخونی اطلاعات مقدار فیلد رو چک کن اگر True بود که اجازه دسترسی داره

aria2006
یک شنبه 01 آذر 1394, 18:51 عصر
خب به شکل؟ یعنی عناوین داخل یک کومبوباکس لود میشن بد کاربر انتخاب میکنه بیشتر توضیح بدید

خب زمان ثبت در دیتابیس از یه دیتاگریدویو لود میشه بعد از انتخاب میشینه داخل تکست باکسها( البته هنگام ثبت مشکلی نیست نهایتش اگه کاربر امین نباشه اسناد نمیدیم بهش که بخواد ثبت سیستم کنه) اما در مشکل هنگام گزارشگیری که حاصل اون در یه دیتاگرید ویو میاد و کاربر میتونه با کلیک روی هر سطر اسناد از پیش ثبت شده رو ببینه ) تصویر هر دو تا گذاشتم.
136975136976

aria2006
یک شنبه 01 آذر 1394, 18:54 عصر
برای هر کدوم از عناوین یک فیلد از نوع bit تعریف کن و برای هر یوزر اون رو ست کن . د رنهایت در هنگام فراخونی اطلاعات مقدار فیلد رو چک کن اگر True بود که اجازه دسترسی داره
بنظر ایده خوبی میاد.. دوستان نظر دیگه ای ندارن؟

abdullah20
یک شنبه 01 آذر 1394, 19:03 عصر
بنظر ایده خوبی میاد.. دوستان نظر دیگه ای ندارن؟
ببینید اساس کار که همینه همانند فرم ها و کنترل هایی که روی فرم هستند
من میخوام بدونم ایا شما میخواید سطح دسترسی را روی همین ۱۱ تا سطر اعمال کنید؟یا نه به ازای هر سندی که ذخیره میشه؟

aria2006
دوشنبه 02 آذر 1394, 07:30 صبح
ببینید اساس کار که همینه همانند فرم ها و کنترل هایی که روی فرم هستند
من میخوام بدونم ایا شما میخواید سطح دسترسی را روی همین ۱۱ تا سطر اعمال کنید؟یا نه به ازای هر سندی که ذخیره میشه؟

سلام- اسنادی که ذخیره میشن خارج از این یازده تا نیستند یعنی هر سندی که بخواد ذخیره بشه یکی از این عناوین بهش میخوره تو دیتابیس ذخیره میشه. و هنگام فراخوانی چه در گزارشات یا هر جای دیگه که باشه همین یازده نوع سند هستند که بازخوانی میشه از دیتابیس.

محمد رضا فاتحی
دوشنبه 02 آذر 1394, 08:03 صبح
اگه مواردتون محدوده می تونید یه فیلد توی دیتابیس کاربران داشته باشید از توع مثلا varchar و به ازای هر دسترسی (به ترتیب) به صورت 1 و0 ذخیره کنید مثلا یه همچین چیزی 00010001110001 بازهم می گم ترتیبش مهمه

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

if(permision[2]=='1')
{
//OK
}
else
{
//Not
}

aria2006
سه شنبه 10 آذر 1394, 16:13 عصر
اگه مواردتون محدوده می تونید یه فیلد توی دیتابیس کاربران داشته باشید از توع مثلا varchar و به ازای هر دسترسی (به ترتیب) به صورت 1 و0 ذخیره کنید مثلا یه همچین چیزی 00010001110001 بازهم می گم ترتیبش مهمه

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

if(permision[2]=='1')
{
//OK
}
else
{
//Not
}


سلام- من برای هر سند یه شماره دسترسی در نظر گرفتم مثلا اگه 11 تا سند دارم از شماره 101 تا 112 - بعدش یه جدول ساختم که شامل کد کاربر،شماره دسترسی سند،فلگی که محتواش یا صفره یا یک و کد سند هستش... که کاربر در اپلیکیشن با پر و خالی کردن چک باکس شماره دسترسی مثلا چک باکس شماره 109 که اسم سند هم در کنارش اومده میاد فلگ رو صفر یا یک میکنه و بدین صورت اطلاعات اون جدولم پر میشه... فعلا از این روش استفاده کردم... الان سوالم اینه حالا در نرم افزار در هنگام فراخوانی بهترین روشی که بشه فهمید این کاربر دسترسی داره یا نه کدومه؟ مثلا هر بار کاربر خواست سندی رو ببینه بیام وصل شم به دیتابیس و SqlDataReader بزنم ببینم اگه فلگ یکه اجازه بده، اگه صفره خیر ؟؟ روش کلی تری وجود نداره مثلا در دلفی یه چیزی هست اگه اشتباه نکنم بنام post که هنگام لود شدن فرم یکبار کیله دسترسی های موجود در اون فرمو set میکنه و تمام تا باز شدن فرم بعدی ... تو سی شارپ به چه صورته؟ ببخشید اگه طولانی شد:لبخندساده:

ژیار رحیمی
سه شنبه 10 آذر 1394, 17:12 عصر
سلام به نظر من یه کلاس static که شامل تعداد فیلد های مجوز دسترسی و توابعی برای چک کردن هر مجوز دسترسی که نوع برگشتی هر تابع از نوع boolean باشه.شما جهت کمتر کردن اجرای کویری به دیتابیس در نقطه شروع برنامه مجوز های لازم بر اساس کد کاربر لاگین شده رو بخون و در کلاس ذخیره کن.چون کلاس و متدهای آن استاتیک هست در کل پروژه قابل دسترسی هست.موقع بررسی هم کافیست متد استاتیک کلاس رو چک کنی

aria2006
سه شنبه 10 آذر 1394, 17:23 عصر
سلام به نظر من یه کلاس static که شامل تعداد فیلد های مجوز دسترسی و توابعی برای چک کردن هر مجوز دسترسی که نوع برگشتی هر تابع از نوع boolean باشه.شما جهت کمتر کردن اجرای کویری به دیتابیس در نقطه شروع برنامه مجوز های لازم بر اساس کد کاربر لاگین شده رو بخون و در کلاس ذخیره کن.چون کلاس و متدهای آن استاتیک هست در کل پروژه قابل دسترسی هست.موقع بررسی هم کافیست متد استاتیک کلاس رو چک کنی

سپاس از شما - پیشنهاد عالی هستش. ولی چون من برای اولین باره میخوام انجام بدم اگه نمونه کدی دارید قرار بدید که ممنون میشم هم من وهم کسایی که بعدا این تاپیکو میبینن. در غیر اینصورت یکی دو روزی روی پیشنهادتون کار میکنم اگه به مشکل برخوردم همینجا مطرح میکنم... فقط یه سوال منظور از در نقطه شروع برنامه مجوزهای .... آیا نقطه شروع کلاس program پروژه ست یا اولین فرمی که بعد از ورود به برنامه لود میشه هستش؟

محمد رضا فاتحی
سه شنبه 10 آذر 1394, 17:28 عصر
هنگام ورود کاربر پس از چک کردن نام کاربری و کلمه عبور یه کلاس تعریف کنید و متغیرهای مربوط به دسترسی رو بصورت static داخلش قرار بدید...

jafarpalideh
چهارشنبه 11 آذر 1394, 07:51 صبح
چطور میتونم تویه برنامه به کاربر دسترسی به ویرایش و حذف و ایجاد بدم ؟
غیر فعال کردن منوهارو واسه ی کاربر میدونم و مشکلی ندارم .
ولی اون فقط یک فرم رو از دسترس خارج میکنه .
من دو تا حالت رو میخوام .
1 - کاربر نتونه اطلاعات کاربر دیگه رو تغییر بده .
2- همون اول به کاربر اجازه ی ایجاد و حذف و ویرایش رو بدیم .


من تویه هر فرمم سه تا دکمه دارم .
ثبت و حذف و ویرایش.
ببینید منطق من درسته ؟
یعنی باید بیام تویه دیتابیس به ازای هر فرمم یه سطر ایجاد کنم و تویه هر سطر مشخص کنم که هر کاربر من که با یوزر مشخص وارد میشه اگه طبق دیتابیس دسترسی داشت بیاد و دسترسی بگیره ؟
میشه یکم قضیه رو بازتر کنید ؟

ژیار رحیمی
چهارشنبه 11 آذر 1394, 07:59 صبح
راه بهتر به نظر من در پروژه های بزرگتر که تعداد Form ها(تعداد مجوزهای ایجاد شده) زیاد هستش بهتره شما فقط مجوزهایی که کاربر حق دسترسی نداره رو تو جدول دیتابیس ذخیره کنی.قاعده این جوری هست که ما در سیستم مجوز دسترسی یه مجوز Full (مدیر)که تمام اختیارات رو داره و مجوز کاربر عادی(که برخی مجوز های دسترسی رو نداره).در این حالت اگر نوع کاربری مدیر نبود آنگاه به چک کردن مجوزها می پردازیم .در کل بستگی به نحوه پیاده سازی شما نسبت به نحوه مجوز به کاربران داره.بعضی دوستان تمایل دارن فقط سه عمل اصلی درج ، ویرایش و حذف رو به عنوان permission به کاربر بدن بعضی هم دوست دارن مجوزهای بیشتری نسبت به حالت اول(نمایش، چاپ ، پشتیبان گیری ،تعریف کاربر و...) داشته باشن

jafarpalideh
چهارشنبه 11 آذر 1394, 08:02 صبح
بنده دنبال یک سمپل هستم . آیا برای شما مقدور هست که یک سمپل فقط برای یک فرم با دکمه های ایجاد و حذف و ویرایش قرار بدین ؟

ژیار رحیمی
چهارشنبه 11 آذر 1394, 08:15 صبح
دوست گرامی اگر کاربر نتونه اطلاعات دیگر کاربران رو تغییر بده به جز مدیر سیستم شما باید به تمام جداول خود فیلد کد کاربری رو اضافه کنی .تا بتونی براساس کد کاربری که رکورد رو ایجاد کرده مجوز لازم رو بررسی کنی.در اکثر نرم افزار ها موقع نصب یه کاربر با مجوز مدیر سیستم به صورت پیش فرض تعرف شده شما هم یه کاربر پیش فرض که نوع کاربری آن از نوع مدیر سیستم هست تعریف کن .چشم امروز در یه فرصت یه نمونه کد هم خواهم گذاشت.دوستانی که تجربه کار در این زمینه رو دارن در صورت تمایل نمونه کد های خود بزارن

jafarpalideh
چهارشنبه 11 آذر 1394, 08:30 صبح
منظورم این نبود که فقط مدیر بتونه اطلاعات رو تغییر بده .
منظورم اینه که بشه کاربر مافوق برای هر کاربر تعریف کرد تا کاربر مافوق بتونه اطلاعات زیردستی رو تغییر بده .

ژیار رحیمی
چهارشنبه 11 آذر 1394, 08:51 صبح
این بخش که شما بهش اشاره کردی باید کاربران سیستم رو بصورت گروه بندی (ساختار سلسله مراتبی ) پیاده سازی کنی یعنی در جدول کاربران یه فیلد کاربری دیگه بنام مافوق (Parent)داشته یاشی .وقتی کاربری تعریف میشود در صورت لزوم مافوق کاربر جدید مشخص شود.باز یاداوری میکنم بستگی به خود شما داره چگونه پیاده سازی شود.ممکنه برنامه نویسی بخواد همین روش رو به اینصورت که هر مافوق در حد مجوزهایی که داره کاربر جدید زیر مجموعه خودشو تعریف کنه (در حد مجوزهایی که خود مافوق داره )کاربران زیر مجموعه مجوزهای بیشتری از کاربر مافوق نداشته باشند

محمد رضا فاتحی
چهارشنبه 11 آذر 1394, 11:11 صبح
یه نمونه خیییییییییلی ساده طبق روش خودم برات درست کردم ببین بدرت می خوره؟
سوالی داشتی بگو همینجا توضیح می دم

jafarpalideh
چهارشنبه 11 آذر 1394, 12:14 عصر
میشه اسکریپت دیتابیس رو بزاری ؟
من از sql servere 2008 r2 استفاده میکنم .

ali_md110
چهارشنبه 11 آذر 1394, 13:12 عصر
میتونید از Attribute ها استفاده کنید ینی Custom Attribute هایی بنویسید و شرط بندی تون رو توی این کلاسها انجام بدید و به کلاس ها و متدها و اعضای کلاس نسبت بدید مثل صفاتی که در System.ComponentModel.DataAnnotations موجود هست و در ef code first استفاده میشه

jafarpalideh
پنج شنبه 12 آذر 1394, 08:14 صبح
من یه همچین چیزی نوشتم که فرم ها رو اجازه ی دسترسی میده . ولی تویه دکمه ها موندم که چطور اجازه ی اضافه و ویرایش و حذف رو از کاربر بگیرم .
اینم اسکریپت دیتابیس .

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TblUser]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[TblUser]
GO


CREATE TABLE [dbo].[TblUser] (
[username] [nvarchar] (50) COLLATE Arabic_CI_AS NULL ,
[pass] [nvarchar] (50) COLLATE Arabic_CI_AS NULL ,
[FullName] [nvarchar] (50) COLLATE Arabic_CI_AS NULL ,
[m0] [bit] NULL ,
[m01] [bit] NULL ,
[m02] [bit] NULL ,
[m03] [bit] NULL ,
[m04] [bit] NULL ,
[m05] [bit] NULL ,
[m06] [bit] NULL ,
[m1] [bit] NULL ,
[m11] [bit] NULL ,
[m12] [bit] NULL ,
[m13] [bit] NULL
) ON [PRIMARY]
GO







فایل رو هم ضمیمه کردم .

دوستان رویه این میتونن بگن که چطور کاربر ارشد رو لحاظ کنم و چطور اجازه ی ایجاد و ویرایش و حذف رو بگیرم ؟

ژیار رحیمی
جمعه 13 آذر 1394, 12:45 عصر
سلام عذرخواهی میکنم که دیر شد یه نمونه کد در رابطه با نحوه ست کردن Permission
لینک دانلود (http://us.cdn.persiangig.com/download/26Gxax/dl)


لینک اصلاح شد

jafarpalideh
شنبه 14 آذر 1394, 07:03 صبح
سلام عذرخواهی میکنم که دیر شد یه نمونه کد در رابطه با نحوه ست کردن Permission
لینک دانلود (http://http://cdn.persiangig.com/download/26Gxax/dl)

آقای رحیمی عزیز فکر کنم لینک مشکل داره .
میشه چک کنید ؟

aria2006
شنبه 14 آذر 1394, 08:32 صبح
سلام عذرخواهی میکنم که دیر شد یه نمونه کد در رابطه با نحوه ست کردن Permission
لینک دانلود (http://http://cdn.persiangig.com/download/26Gxax/dl)

سلام- لینک مشکل داره

ژیار رحیمی
شنبه 14 آذر 1394, 09:47 صبح
دوستان لینک اصلاح شده