PDA

View Full Version : مقاله: ايجاد حساب كاربري براي برنامه و Login شدن بآن



ROSTAM2
دوشنبه 12 تیر 1391, 02:26 صبح
مواد لازم : 3 تا فرم -( ايجاد حساب كاربري - تغيير و حذف حساب كاربري - تغيير رمز ورود ) ، يك بانك اطلاعاتي با فيلد به مقدار لازم ، توابع Query و ...

ابتدا فرم ها رو به اين ترتيب بسازيد كه كدهاشونو اينجا گذاردم مي تونيد Copy‌ كنيد و استفاده كنيد:

ايجاد حساب كاربري:

http://axgig.com/images/40489086772791815806.png

كد فرم :


Public Class CreateAccount
Enum UserTypes
Limit = 0
Admin = 1
End Enum
Public Property UserName() As String
Get
Return UserNameBox.Text
End Get
Set(ByVal value As String)
UserNameBox.Text = value
End Set
End Property
Public Property Password() As String
Get
Return PasswordBox.Text
End Get
Set(ByVal value As String)
PasswordBox.Text = value
End Set
End Property
Public Property ConfirmPassword() As String
Get
Return ConfirmPasswordBox.Text
End Get
Set(ByVal value As String)
ConfirmPasswordBox.Text = value
End Set
End Property
Public Property Description() As String
Get
Return DescriptionBox.Text
End Get
Set(ByVal value As String)
DescriptionBox.Text = value
End Set
End Property
Dim UserTP As UserTypes
Public Property UserType() As UserTypes
Get
Return UserTP
End Get
Set(ByVal value As UserTypes)
UserTP = value
End Set
End Property
Public Property SavePass() As Boolean
Get
Return SaveUserPassBox.Checked
End Get
Set(ByVal value As Boolean)
SaveUserPassBox.Checked = value
End Set
End Property


Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
ErrorProvider1.Clear()
If Len(UserNameBox.Text) = 0 Then
ErrorProvider1.SetError(UserNameBox, "نام کاربري را وارد کنيد")
Exit Sub
End If

FirstForm.UsersTableAdapter1.Fill(FirstForm.UserAc countsDataSet1.Users)
With FirstForm.UserAccountsDataSet1.Users
For I = 0 To .Count - 1
If Me.UserName = Trim(.Item(I).UserName) Then
ErrorProvider1.SetError(UserNameBox, "اين نام کاربري قبلا استفاده شده است")
Exit Sub
End If

Next
End With
If Not PasswordBox.Text = ConfirmPasswordBox.Text Then
If Len(PasswordBox.Text) > 0 Or Len(ConfirmPasswordBox.Text) > 0 Then
ErrorProvider1.SetError(PasswordBox, "رمز ورود و تائيد آن با هم همخواني ندارد")
ErrorProvider1.SetError(ConfirmPasswordBox, "رمز ورود و تائيد آن با هم همخواني ندارد")
Exit Sub
End If

End If

Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End Sub

Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim FBD As New OpenFileDialog With {.Title = "Select an image file..."}
With FBD

If .ShowDialog(Me) = Windows.Forms.DialogResult.Cancel Then Exit Sub
'ROSTAM Statements
UserPhotoBOX.Tag = .FileName
UserPhotoBOX.ImageLocation = .FileName
' UserPhotoBOX.Image = Image.FromFile(.FileName)
End With
End Sub

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
UserTP = UserTypes.Limit
End Sub

Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
UserTP = UserTypes.Admin
End Sub

Private Sub CreateAccount_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If UserTP = UserTypes.Admin Then
RadioButton2.Checked = True
Else
RadioButton1.Checked = True
End If
End Sub
End Class

ROSTAM2
دوشنبه 12 تیر 1391, 02:32 صبح
فرم دوم تغيير رمز ورود يا مديريت حساب :

شكل:

http://axgig.com/images/76544792689713986011.png

كد:


Public Class ModifyAccount
Enum UserTypes
Limit = 0
Admin = 1
End Enum
Public Property UserName() As String
Get
Return UserNameBox.Text
End Get
Set(ByVal value As String)
UserNameBox.Text = value
End Set
End Property
Public Property Password() As String
Get
Return PasswordBox.Text
End Get
Set(ByVal value As String)
PasswordBox.Text = value
End Set
End Property
Public Property ConfirmPassword() As String
Get
Return ConfirmPasswordBox.Text
End Get
Set(ByVal value As String)
ConfirmPasswordBox.Text = value
End Set
End Property
Public Property Description() As String
Get
Return DescriptionBox.Text
End Get
Set(ByVal value As String)
DescriptionBox.Text = value
End Set
End Property
Dim UserTP As UserTypes
Public Property UserType() As UserTypes
Get
Return UserTP
End Get
Set(ByVal value As UserTypes)
UserTP = value
End Set
End Property
Public Property SavePass() As Boolean
Get
Return SaveUserPassBox.Checked
End Get
Set(ByVal value As Boolean)
SaveUserPassBox.Checked = value
End Set
End Property

Public Property OldPassword() As String
Get
Return OldPasswordBox.Text
End Get
Set(ByVal value As String)
OldPasswordBox.Text = value
End Set
End Property

Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
ErrorProvider1.Clear()
If Len(UserNameBox.Text) = 0 Then
ErrorProvider1.SetError(UserNameBox, "نام کاربري را وارد کنيد")
Exit Sub
End If

FirstForm.UsersTableAdapter1.Fill(FirstForm.UserAc countsDataSet1.Users)
If Not Me.OldPassword = Trim(FirstForm.UsersTableAdapter1.GetPassbyUserNam e(Me.UserName)) Then
ErrorProvider1.SetError(OldPasswordBox, "رمز ورود فعلي را اشتباه وارد کرده ايد")
Exit Sub
End If

If Not PasswordBox.Text = ConfirmPasswordBox.Text Then
If Len(PasswordBox.Text) > 0 Or Len(ConfirmPasswordBox.Text) > 0 Then
ErrorProvider1.SetError(PasswordBox, "رمز ورود و تائيد آن با هم همخواني ندارد")
ErrorProvider1.SetError(ConfirmPasswordBox, "رمز ورود و تائيد آن با هم همخواني ندارد")
Exit Sub
End If

End If
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End Sub

Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim FBD As New OpenFileDialog With {.Title = "Select an image file..."}
With FBD
If .ShowDialog(Me) = Windows.Forms.DialogResult.Cancel Then Exit Sub
'ROSTAM Statements
UserPhotoBOX.Tag = .FileName
UserPhotoBOX.ImageLocation = .FileName
End With

End Sub

Private Sub ModifyAccount_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Select Case UserType
Case UserTypes.Admin
RadioButton2.Checked = True
Case UserTypes.Limit
RadioButton1.Checked = True
End Select
End Sub

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
UserType = UserTypes.Limit
End Sub

Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
UserType = UserTypes.Admin
End Sub
End Class

ROSTAM2
دوشنبه 12 تیر 1391, 02:35 صبح
فرم سوم براي Login شدن و تغيير حساب كاربري براي استفاده از برنامه

شكل:

http://axgig.com/images/44070207665565862648.png

كد:


Public Class LoginForm
Public Property UserName() As String
Get
Return UserBox.Text
End Get
Set(ByVal value As String)
UserBox.Text = value
End Set
End Property
Public Property Password() As String
Get
Return PasswordBox.Text
End Get
Set(ByVal value As String)
PasswordBox.Text = value
End Set
End Property

Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
ErrorProvider1.Clear()
If Not Me.Password = Trim(FirstForm.UsersTableAdapter1.GetPassbyUserNam e(Me.UserName)) Then
ErrorProvider1.SetError(PasswordBox, "رمز ورود را اشتباه وارد کرده ايد")
Exit Sub
End If
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End Sub

Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub

Private Sub LoginForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If UserBox.Items.Count > 0 Then
UserBox.SelectedIndex = 0
End If
End Sub
End Class

ROSTAM2
دوشنبه 12 تیر 1391, 02:41 صبح
حال طبق آموزشي كه در اين تاپيك (http://barnamenevis.org/showthread.php?347560-%D8%A7%D9%8A%D8%AC%D8%A7%D8%AF-Local-Database-%D8%A8%D8%B1%D8%A7%D9%8A-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%88-%D8%A8%D9%83%D8%A7%D8%B1%DA%AF%D9%8A%D8%B1%D9%8A-%D8%A2%D9%86)قرار دارد يك LocalDatabase براي برنامه ساخته با يك جدول با نام Users با اين فيلد ها:

http://axgig.com/images/24568461573828615892.png

و اين هم تمام Query (توابع) هايست كه بايد براي جدول Users بسازيد ( بهمراه نامشان قيد شده اند براي اينكه اشتباه نشود ابتدا نام سپس : و سپس دستور Query)


InsertQuery:
INSERT INTO Users
(UserName, Password, IsAdmin, ShowPass, Description)
VALUES (@UserName,@Password,@IsAdmin,@ShowPass,@Descripti on)

UpdateQuery:
UPDATE Users
SET UserName = @UserName, Password = @Password, IsAdmin = @IsAdmin, ShowPass = @ShowPass, Description = @Description
WHERE (UserName = @UserName)

DeletebyUserName:
DELETE FROM Users
WHERE (UserName = @UserName)

GetUserTaypeby:
SELECT IsAdmin AS Expr1
FROM Users
WHERE (UserName = @UserName)

GetPassByUserName:
SELECT Password AS Expr1
FROM Users
WHERE (UserName = @UserName)

GetLimitCount:
SELECT COUNT(*) AS Expr1
FROM Users
WHERE (IsAdmin = 0)

GetCountUsers:
SELECT COUNT(*) AS Expr1
FROM Users

GetAdminCounts:
SELECT COUNT(*) AS Expr1
FROM Users
WHERE (IsAdmin = 1)

ROSTAM2
دوشنبه 12 تیر 1391, 02:44 صبح
اين هم DropDownButton و آيتم هاش براي كار با حسابهاي كاربري

http://axgig.com/images/24793118785397834435.png

در ضمن براي پروژه سه متغير عمومي در يك ماجول با نام هاي CurrentUserName و CurrentPassword بسازيد

اينم يادم رفت بگم كه يك تابع در همون ماجول بسازيد با نام IsAdmin براي شناسايي نوع حساب كاربري

تابع IsAdmin


Function IsAdmin() As Boolean
If Len(CurrentUserName) > 0 Then
Return FirstForm.UsersTableAdapter1.GetUserTypeby(Current UserName)
Exit Function
ElseIf Len(CurrentUserName) = 0 Then
Return True
Exit Function
End If
Return False
End Function

ROSTAM2
سه شنبه 13 تیر 1391, 17:38 عصر
اينم يادم رفت بگم براي نمايش پنجره Login قبل از اجراي برنامه اين متد رو در يك ماجول بنويسيد:


Sub ShowLoginForm()
FirstForm.UsersTableAdapter1.Fill(FirstForm.UserAc countsDataSet1.Users)
If FirstForm.UsersTableAdapter1.GetCountUsers = 0 Then
Exit Sub
End If
LoginForm.UserBox.Items.Clear()
With FirstForm.UserAccountsDataSet1
For I = 0 To .Users.Count - 1
LoginForm.UserBox.Items.Add(.Users.Item(I).UserNam e)
Next
End With
If LoginForm.ShowDialog(FirstForm) = DialogResult.Cancel Then
End
End If
CurrentUserName = LoginForm.UserName
CurrentPassword = LoginForm.Password
End Sub


سپس وارد Application Events از Project Properties لبه Application شده و اين متد را در پروسيجر StartUp صدا بزنيد:


Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupE ventArgs) Handles Me.Startup
ShowLoginForm()
End Sub

JaVa
چهارشنبه 28 تیر 1391, 17:24 عصر
با تشکر از زحمتی که کشیدی.*

خودم می خواستم یه برنامه شبیه این بنویسم بعد یه سئوال کوچیک ؟؟؟ الگوریتم کلی کار چیه ؟؟؟ یعنی چطور باید توی بانک سطح دسترسی کاربران رو تعیین بکنیم؟؟؟

با تشکر.*

ROSTAM2
چهارشنبه 28 تیر 1391, 18:07 عصر
هز طريق اين QUERY تشخيص داده مي شه آيا كاربر دسترسي كامل داره يا نه

GetUserTaypeby:
SELECT IsAdmin AS Expr1
FROM Users
WHERE (UserName = @UserName

و بدين طريق ميتوان بتوسط نام كاربر نوع حساب كاربري را شناخت


Dim UserAccountType As Boolean = UsersTableAdapter1.GetUserTypeby(UserName$)


كه براي سهولت تابعي با نام IsAdmin ساختيم كه به اين كار كمك مي كنه (دونستن نوع حساب) -->
پست شماره 5

Function IsAdmin() As Boolean
If Len(CurrentUserName) > 0 Then
Return FirstForm.UsersTableAdapter1.GetUserTypeby(Current UserName)
Exit Function
ElseIf Len(CurrentUserName) = 0 Then
Return True
Exit Function
End If
Return False
End Function

تنظيمات نحوه دسترسي كاربران عادي در Application Settings ذخيره ميشه كه كنترل اين تنظيمات در بخشي از برنامه به نام Settings (تنظيمات) بر عهده كاربراني است كه دسترسي كامل به اطلاعات دارند

بالفرض مثال ويرايش اطلاعات با عنوان DisableModifyInformation در ApplicationSettings با نوع داده Boolean براي دسترسي محدود ارائه داديم

كه مي شود اين


IF IsAdmin = False Then
ModifyButton.Enabled = Not My.Settings.DisableModifyInformation
End If


اين براي زماني است كه كاربر پنجره مديريت اطلاعات را باز كرده و يا تازه مي كند

اما براي زماني كه مي خواهيم كليد فعال باشد و كاربر كليك كند:


IF IsAdmin = False Then
If My.Settings.DisableModifyInformation = True
Msgbox( "You cant Access this option via this User Account: " + CurrentUserName$,Exclumation)
Exit Sub
End If
End If

JaVa
چهارشنبه 28 تیر 1391, 18:38 عصر
من با تقاسیر زیاد چیزی دستگیرم نشد.

اما من می خوام این کارو کنم:
مثلا فرض بکن که یه برنامه دو جور کاربر داره :

1- کاربر معمولی(تنها کاری که می تونه بکنه جست و جوه)
2- کاربر مدیر (همه ی عملیات رو می تونه انجام بده)

حالا یه یه نفر رو می خوان بعنوان کاربر جدید وارد بانک بشه

اگر کاربر معمولی باشه مفدار 1 ذخیره میشه.

اگر کاربر مدیر باشه مقدار 2 ذخیره بشه.

===========================================

کاربری می خواد وارد سیستم بشه:

باید مشخص بکنه که با چه USER وارد سیستم بشه

که این جوری تعریف می کنیم:

If Val = 1 Then 'کاربر معمولی
Button2.Enabled = False
ElseIf Val = 2 Then 'کاربر مدیر
Button2.Enabled = True
End If

ROSTAM2
چهارشنبه 28 تیر 1391, 21:00 عصر
در اصل فيلد IsAdmin مقدار 0 و 1 رو مي گيره كه اگر 0 شد حساب كاربري ايجاد شده عادي است در غير اينصورت حساب مديريتي است

JaVa
چهارشنبه 28 تیر 1391, 21:15 عصر
در اصل فيلد IsAdmin مقدار 0 و 1 رو مي گيره كه اگر 0 شد حساب كاربري ايجاد شده عادي است در غير اينصورت حساب مديريتي است

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

Public Class LoginForm
Public Property UserName() As String
Get
Return UserBox.Text
End Get
Set(ByVal value As String)
UserBox.Text = value
End Set
End Property


این قطع کد رو هم لطفا توضیح بدید

با تشکر زیاد:

ROSTAM2
پنج شنبه 29 تیر 1391, 03:32 صبح
Public Property UserName() As String
Get
Return UserBox.Text
End Get
Set(ByVal value As String)
UserBox.Text = value
End Set
End Property


اين يك پراپرتي هستش كه مستقيما اطلاعات رو از يك TextBoxمي گيره و يا به اون ارائه مي ده و نيازي نيست پس از تائيد فرم مقداري رو به اين پراپرتي ارائه بديد
چون بهمراه فراخواني پراپرتي مقدار TextBox به اون ارائه داده مي شه


If LoginForm.ShowDialog(me) = Cancel Then Exit Sub
Msgbox( LoginForm.UserName)

sahand100
پنج شنبه 12 مرداد 1391, 19:19 عصر
در اصل فيلد IsAdmin مقدار 0 و 1 رو مي گيره كه اگر 0 شد حساب كاربري ايجاد شده عادي است در غير اينصورت حساب مديريتي است

اگه میشه سورس شو بذارید لطفا

ROSTAM2
جمعه 13 مرداد 1391, 07:16 صبح
اين هم سورس براي نمونه:

http://rostam2.persiangig.com/other/LogInSource.zip

ROSTAM2
دوشنبه 13 شهریور 1402, 08:56 صبح
یادش بخیر یک قرن پیش چقد جوون و شاداب بودم و چه تاپیکایی ایجاد می کردم: تو این تابیک فقط امنیت رمز عبور باید رعایت می شد که این هم تاپیکی برای این مضمون(نپرس ک نمی دونم معنی مضمون چیه فقط شنیدم):

آموزش: تبدیل پسور کاربر به متن امن برای ذخیره در دیتابیس (https://barnamenevis.org/showthread.php?575902-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%BE%D8%B3%D9%88%D8%B1-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D8%A8%D9%87-%D9%85%D8%AA%D9%86-%D8%A7%D9%85%D9%86-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3)