[Silverlight]Wcf Ria Services权限控制的实现
2011-11-14 17:28 slmk 阅读(758) 评论(2) 编辑 收藏 举报WCF RIA Services使用Domain Service域服务为客户端提供数据访问等服务,如何控制这些数据服务的安全访问呢?例如有些服务只有权限高的用户可以访问,有些服务是可以匿名访问的,这又是如何实现的呢?
其实实现原理有些类似于Asp.net MVC的Action Filter,都使用Attribute标记来区分安全等级。看一个简单的Domain Service:
[EnableClientAccess]
public class MyService:DomainService
{
public class MyService:DomainService
{
[RequiresAuthentication]
public DataModel GetDataModel()
{
return new DataModel() { ID = 1, Name = "test" };
}
}
public DataModel GetDataModel()
{
return new DataModel() { ID = 1, Name = "test" };
}
}
如此标记后GetDataModel只有登录用户才能访问,实现了一定程度的数据访问控制。如何实现基于角色的控制呢?你可能猜到了:继承AuthorizationAttribute。
public class AdminRequired : AuthorizationAttribute
{
protected override AuthorizationResult IsAuthorized(System.Security.Principal.IPrincipal principal, AuthorizationContext authorizationContext)
{
if (principal.IsInRole("admins"))
{
return AuthorizationResult.Allowed;
}
return new AuthorizationResult("只有管理员才能访问");
}
}
然后再需要管理员权限的地方加上:
[AdminRequired]
public DataModel GetDataModel()
{
return new DataModel() { ID = 1, Name = "test" };
}
public DataModel GetDataModel()
{
return new DataModel() { ID = 1, Name = "test" };
}
WCF RIA Services的权限控制就是这么简单!