Trong các ứng dụng doanh nghiệp, thông thường dữ liệu rất có giá trị và do vậy việc kiểm soát được người truy cập cũng như quyền của họ là vô cùng quan trọng. May mắn là điều này cũng rất dễ dàng với RIA Services. Ví dụ, cho là chúng ta chỉ muốn những người đã đăng nhập mới có quyền truy cập dữ liệu, điều này có thể thực hiện dễ dàng bằng cách thêm vào một thuộc tính, giống như dòng 2 trong ví dụ dưới:
1: [EnableClientAccess] 2: [RequiresAuthentication] 3: public class DishViewDomainService : LinqToEntitiesDomainService<DishViewEntities> 4: { 5:
Khi chạy ứng dụng, giờ bạn sẽ nhận được một thông báo lỗi. Rõ ràng bạn có thể làm tốt hơn một chút từ góc độ người dùng… nhưng nói chung thì thông báo này cũng tương đối đầy đủ.
Nhớ là có một tùy chọn để đăng nhập, vậy nên chúng ta sẽ đăng nhập vào hệ thống…
và thậm chí đăng ký một tài khoản mới.
và khi nạp lại, chúng ta sẽ lấy được dữ liệu:
Giờ thì ứng dụng đã biết tôi là ai và cung cấp một tùy chọn để tôi đăng xuất.
Bạn cũng có thể tương tác với người dùng đang đăng nhập hiện tại, ví dụ, chỉ trả về các bản ghi mà họ đã chỉnh sửa, hoặc như trong trường hợp này, ghi lại tất cả các thao tác truy cập của họ.
1: public IQueryable<Restaurant> GetRestaurants() 2: { 3: File.AppendAllLines(@"C:\Users\brada\Desktop\log.txt", new string[] { 4: String.Format("{0}:{1}", DateTime.Now, 5: this.ServiceContext.User.Identity.Name)}); 6: return this.ObjectContext.Restaurants 7: .Where (r=>r.Region != "NC") 8: .OrderBy(r=>r.ID); 9: } 10:Dòng 5 chính là chìa khóa giúp chúng ta biết được người dùng hiện tại trên server, và nhờ đó ta có thể có các dòng log sau:
3/7/2010 9:42:57 PM:darb
3/7/2010 9:43:05 PM:darbGiờ bạn cũng có thể cá nhân hóa lại một chút, cho là chúng ta muốn người dùng có thể đưa ra một màu ưa thích, ta có thể lưu lại trên cả client và server, và do vậy người dùng có thể dùng mà không phụ thuộc vào máy tính họ đang ngồi.
Đầu tiên ta sẽ phải thêm BackgroundColor và bộ lưu trữ, trong trường hợp này tôi dùng bộ lưu trữ ASP.NET profile, tôi sẽ thêm một vài dòng cân thiết vào file web.config.
Sau đó tôi cần truy cập vào nó từ chương trình Silverlight, do vậy tôi thêm một thuộc tính vào lớp User trong Models\User.cs.
public partial class User : UserBase { public string FriendlyName { get; set; } public string BackgroundColor { get; set; } }Cuối cùng, tôi muốn truy cập vào từ client, trong file Main.xaml tôi thêm các dòng 2 và 3:
1: <Grid x:Name="LayoutRoot" Style="{StaticResource LayoutRootGridStyle}" 2: Background="{Binding Path=User.BackgroundColor}" 3: DataContext="{StaticResource WebContext}"> 4: 5:Chạy và bạn sẽ có màu mặc nhiên:
Giờ đã hoạt động rồi, nhưng vẫn có thể làm cho nó tốt hơn nếu cho phép người dùng tự thay đổi màu của chính họ. Do vậy trong About.xaml, tôi sẽ làm cùng một mô hình như trên.
<Grid x:Name="LayoutRoot" DataContext="{StaticResource WebContext}">và
<sdk:Label Content="Background Color:" /> <TextBox Text="{Binding Path=User.BackgroundColor, Mode=TwoWay}" Height="23" />Sau đó gắn sự kiện Click của nút Save vào phương thức sau:
private void button1_Click(object sender, System.Windows.RoutedEventArgs e) { WebContext.Current.Authentication.SaveUser(false); }Và nó làm việc!
Và tuyệt vời nhất là nếu bạn chạy nó từ một cửa sổ trình duyệt khác, hay thậm chí là trên một máy tính khác, bạn cũng sẽ lại màu đã chọn sau khi đăng nhập!
Leave a Reply