我在周末实现了一个带有自定义身份验证的自定义 RoleProvider。使用 Silverlight 业务模板,我能够将 [RequiresRole("Admin")] 属性放在服务请求上:
[RequiresRole("Admin")]
public IQueryable<P_BUDGET> GetBudgets()
{
return this.ObjectContext.P_BUDGET;
}
这就像一个魅力。我使用了以下代码
然后我访问了 Kyle McClellans 授权库。如果我在 XAML (s:Authorization.RequiresRole="Admin") 中的 HyperlinkButton 上设置“RequiresRole”属性,它会在应用加载时成功隐藏按钮。当我登录时,我希望它能够识别我的测试用户所在的“管理员”角色,最终将该 HLB 的可见性更改为 true。但是,当我单步执行代码时,我进入了我的 App.Web.g.cs 文件,它具有以下功能:
public bool IsInRole(string role)
{
if ((this.Roles == null))
{
return false;
}
return global::System.Linq.Enumerable.Contains(this.Roles, role);
}
在上面的代码中,this.Roles 为空。我在这里想念什么?第一个代码块使用我已经覆盖的“GetRolesForUser”方法,并从我的数据库中的视图返回角色列表。第二个使用了 IsInRole,我读过的不是你应该修改的东西。
感谢您的帮助!