📢 Loạt tính năng mới: Kết nối tài khoản Diễn Đàn với toàn bộ Thư Viện (Truyện/Thơ/Nhạc/Phim/Ẩm Thực)
Xin chào cả nhà!


Ban quản trị vừa hoàn tất một loạt tính năng mới, kết nối tài khoản Diễn Đàn với toàn bộ các khu vực Truyện, Thơ, Nhạc, Phim và Ẩm Thực. Xin tổng kết lại để mọi người tiện theo dõi và sử dụng:

1. Đăng nhập dùng chung toàn site
Chỉ cần 1 tài khoản Diễn Đàn, đăng nhập một lần là dùng được ở mọi khu vực. Nút "Đăng nhập / Đăng ký" đã thay cho "Giới thiệu / Trợ giúp" cũ ở đầu mỗi trang.

2. Thảo luận ngay dưới tác phẩm
Mỗi truyện, bài thơ, bài hát, phim, món ăn giờ có khung bình luận riêng ngay trên trang đọc/nghe/xem - không cần qua diễn đàn mới góp ý được. Bình luận đầu tiên sẽ tự tạo 1 chủ đề trong mục "💬 Thảo Luận Tác Phẩm Thư Viện" để mọi người cùng trao đổi.

3. Theo dõi tác phẩm
Bấm "🔔 Theo dõi tác phẩm" để nhận thông báo qua email ngay khi truyện có chương mới.

4. Yêu thích & Lịch sử đọc
Đánh dấu "⭐ Yêu thích" các tác phẩm ưng ý, và hệ thống tự ghi lại "🕘 Lịch sử đọc" mỗi khi bạn ghé đọc/nghe/xem - đồng bộ theo tài khoản, xem lại bất cứ lúc nào trong menu thành viên.

5. Huy hiệu hoạt động
Một vài huy hiệu nhỏ (bình luận viên, người theo dõi, người sưu tầm, thành viên kỳ cựu...) sẽ tự xuất hiện trên hồ sơ khi bạn hoạt động tích cực - hoàn toàn không phải hệ thống điểm/tiền thưởng, chỉ mang tính ghi nhận cho vui.

6. Ghi công người đóng góp
Tên người đăng nội dung (đánh máy, sưu tầm...) giờ sẽ tự động liên kết về hồ sơ Diễn Đàn nếu trùng với một tài khoản đang có trên diễn đàn.

7. Báo lỗi nội dung
Phát hiện lỗi chính tả, thiếu nội dung, ảnh hỏng... trong lúc đọc? Bấm "🚩 Báo lỗi nội dung" ngay trên trang, không cần rời khỏi tác phẩm đang xem.

8. Cải thiện giao diện trên điện thoại
Đầu trang và khu vực diễn đàn đã được chỉnh lại cho gọn gàng hơn trên màn hình nhỏ.

Rất mong nhận được góp ý thêm từ cả nhà để hoàn thiện dần. Cảm ơn mọi người đã luôn đồng hành cùng Việt Nam Thư Quán!

Diễn Đàn » Hướng Dẫn Lập trình

Đăng nhập vào một tài khoản khác bằng mã lệnh

0 trả lời, 433 lượt xem — Trang 1 / 1
Bạn muốn một phần mã lệnh của bạn thực thi dưới tài khoản của một người dùng khác chứ không phải của người dùng hiện hành.
Đăng nhập vào tài khoản mới bằng hàm không-được-quản-lý LogonUser, và sử dụng phương thức WindowsIdentity.Impersonate.
Theo mặc định, mã lệnh của bạn thực thi dưới identity của người dùng hiện hành. Điều này có nghĩa: mã lệnh của bạn sẽ có khả năng thực hiện bất kỳ hành động nào mà người dùng đó có thể và sẽ bị cản nếu thực hiện bất kỳ hành động nào mà người dùng đó bị cấm. Tuy nhiên, trong một vài trường hợp, bạn muốn mã lệnh của bạn có thể thực thi với các quyền khác với tài khoản người dùng hiện hành. Ví dụ, bạn muốn tạo một ứng dụng chạy thường trực trong một buồng dùng chung ở một cơ quan. Trước khi một người dùng có thể thực hiện các thao tác nào đó (như đọc file), bạn sẽ muốn ứng dụng tạm thời đóng vai identity của người dùng đó để các quyền và hạn chế phù hợp được áp dụng. Hoặc bạn muốn tạo một ứng dụng có thể chạy dưới chế độ “administrator” và “user”. Trong các trường hợp này, bạn sẽ muốn ứng dụng của bạn tạm thời đóng vai một identity khác—quá trình này được gọi là sự giả nhận (impersonation).
Để sử dụng sự giả nhận trong một ứng dụng .NET, bạn cần thực hiện năm bước:
1.       Đăng nhập vào tài khoản mới bằng hàm không-được-quản-lý LogonUser (thuộc Windows API¾file advapi32.dll). Hàm này trả về một tham chiếu bộ nhớ đến security token của người dùng.
2.       Sao lại token này bằng hàm không-được-quản-lý DuplicateToken (cũng được định nghĩa trong file advapi32.dll).
3.       Sử dụng token này để tạo một đối tượng WindowsIdentity mới bằng cách truyền nó cho hàm khởi dựng.
4.       Gọi phương thức WindowsIdentity.Impersonate để giả nhận identity mới. Phương thức này trả về một đối tượng WindowsImpersonationContext.
5.       Kể từ đây, bạn có thể thực thi mã lệnh dưới tài khoản mới này. Để ngừng giả nhận, gọi phương thức Undo của đối tượng WindowsImpersonationContext.
Ứng dụng Console dưới đây sẽ minh họa các bước này. Để sử dụng đoạn mã này, bạn phải nhập không gian tên System.Security.Principal.
Public Module WindowsSecurityTest    ' Hàm API này lấy security token của một người dùng.    Private Declare Auto Function LogonUser Lib "advapi32.dll" _      (ByVal lpszUsername As String, ByVal lpszDomain As String, _      ByVal lpszPassword As String, ByVal dwLogonType As Integer, _      ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) _      As Integer       Private Enum Logon        Interactive = 2                      NetworkCleartext = 8    End Enum    Private Enum Provider        [Default] = 0        WindowsNT35 = 1        WindowsNT40 = 2        Windows2000 = 3    End Enum    ' Hàm API này sao lại một security token để bạn có thể sử dụng nó.    Private Declare Auto Function DuplicateToken Lib "advapi32.dll" _      (ByVal ExistingTokenHandle As IntPtr, _      ByVal ImpersonationLevel As Integer, _      ByRef DuplicateTokenHandle As IntPtr) As Integer    Public Sub Main()        Console.WriteLine("*** Current User ***")        DisplayIdentityInfo()        ' Lấy thông tin đăng nhập từ người dùng.        Console.WriteLine("Enter the information for the user " & _           "you want to impersonate.")        Dim UserName, Domain, Password As String        Console.Write("Domain: ")        Domain = Console.ReadLine()        Console.Write("User Name: ")        UserName = Console.ReadLine()        Console.Write("Password: ")        Password = Console.ReadLine()        ' Đăng nhập với identity mới.        Dim NewIdentity As WindowsIdentity        NewIdentity = GetWindowsIdentity(UserName, Domain, Password)        Console.WriteLine()        If NewIdentity Is Nothing Then            Console.WriteLine("Invalid credentials.")        Else            ' Giả nhận identity mới.            Dim NewContext As WindowsImpersonationContext            NewContext = NewIdentity.Impersonate()            Console.WriteLine("*** Starting Impersonation ***")            DisplayIdentityInfo()            ' Trở về identity ban đầu.            NewContext.Undo()            Console.WriteLine("*** Ending Impersonation ***")            DisplayIdentityInfo()        End If        Console.ReadLine()    End Sub    ' Hàm này hiển thị thông tin về người dùng hiện hành.    Private Sub DisplayIdentityInfo()        Dim Identity As WindowsIdentity = WindowsIdentity.GetCurrent()        Console.WriteLine("This application is executing as " & _          Identity.Name)        Console.WriteLine()    End Sub    ' Hàm này sử dụng các hàm Win32 API để trả về một đối tượng     ' WindowsIdentity đối với một người dùng cho trước.    Private Function GetWindowsIdentity(ByVal UserName As String, _      ByVal Domain As String, ByVal Password As String) _      As WindowsIdentity        Dim SecurityToken, TokenDuplicate As IntPtr        If LogonUser(UserName, Domain, Password, _          Logon.Interactive, Provider.Default, SecurityToken) > 0 Then            DuplicateToken(SecurityToken, 2, TokenDuplicate)            Return New WindowsIdentity(TokenDuplicate)        Else            ' Thông tin người dùng không hợp lệ.            Return Nothing        End If    End FunctionEnd Module

Kết xuất của ứng dụng này có thể như sau:
*** Current User ***This application is executing as GOLDSOFT\nnbphuong81Enter the information for the user you want to impersonate.Domain: goldsoftUser Name: testPassword: test*** Starting Impersonation ***This application is executing as GOLDSOFT\test*** Ending Impersonation ***This application is executing as GOLDSOFT\nnbphuong81
Windows XP áp đặt một số hạn chế lên việc sử dụng mật khẩu trống để ngăn chặn những cuộc tấn công dựa-vào-mạng (network-based attack). Và kết quả là: bạn không thể sử dụng hàm LogonUser để giả nhận một tài khoản với mật khẩu trống.Trích từ "Các giải pháp lập trình VISUAL BASIC.NET (tập 2)"
Đăng nhập để trả lời
0