C# IsInRole-customRoleProvider的问题
我在周末实现了一个带有自定义身份验证的自定义RoleProvider。使用Silverlight业务模板,我能够在服务请求上添加[RequiresRole(“Admin”)]属性:C# IsInRole-customRoleProvider的问题,c#,silverlight,roleprovider,C#,Silverlight,Roleprovider,我在周末实现了一个带有自定义身份验证的自定义RoleProvider。使用Silverlight业务模板,我能够在服务请求上添加[RequiresRole(“Admin”)]属性: [RequiresRole("Admin")] public IQueryable<P_BUDGET> GetBudgets() { return this.ObjectContext.P_BUDGET; } 在上面的代码中,this.Roles为null。我错过了什么?第一个代码块使用“Get
[RequiresRole("Admin")]
public IQueryable<P_BUDGET> GetBudgets()
{
return this.ObjectContext.P_BUDGET;
}
在上面的代码中,this.Roles为null。我错过了什么?第一个代码块使用“GetRolesForUser”方法(我已经重写了该方法),并从我在数据库中的视图返回角色列表。第二个使用了IsInRole,我已经读过,您不应该修改它
谢谢你的帮助 我已经实现了我的custon角色提供程序,您需要在global.asax,int Application\u Start方法中创建角色。我有这样的想法:
void Application_Start(object sender, EventArgs e)
{
Roles.ApplicationName = "MyAppName";
if (!Roles.RoleExists("admin"))
Roles.CreateRole("admin");
if (!Roles.RoleExists("operator"))
Roles.CreateRole("operator");
if (!Roles.RoleExists("user"))
Roles.CreateRole("user");
}
祝您好运。您的自定义角色提供程序应负责从数据库生成角色列表,或通过数据库调用验证用户是否在角色中
请看一下来自microsoft的示例代码:
角色
在本例中,是由用户继承的类的属性,该类在支持的web项目(模型/用户
文件夹)中定义。默认情况下,这使用表单身份验证机制,有关用户、配置文件、“角色”等的数据存储在本地数据库中(在App\u data
文件夹中)。为了实现这一点,我建议您重写此属性以返回所需的特定角色,并且还应该设置表单身份验证以使用您自己的用户数据
希望这有帮助:)谢谢大家的回答,但我通过凯尔·麦克莱伦在自己的回答中的评论找到了解决办法。我已经覆盖了GetAuthenticatedUser,其中一部分包括从db获取我的角色。非常简单,我必须将user.Roles=Roles放在这里,其中Roles是从我的db视图返回的角色列表。这个.Roles什么时候填充?如果它从不这样做,它将始终为空。我不知道如何填充此.Roles。下面的答案可能有用,但我不确定。我已经尝试了好几天了。我想这就是我用getrolesforuser在自定义角色管理器中设置的,当我从db中取出角色并返回每个方法签名的字符串数组时。我担心这些函数的默认行为。我没有相同模式的角色数据库。我只是在实体数据模型中调用一个视图来获取角色,我不确定这与上面的内容有什么关系。我想我的评论没有保存。我在哪里重写isinrole?已经使用表单身份验证了。我还尝试覆盖user.cs文件中的角色属性,但出现了一个错误,即角色不可覆盖,因为它未声明为虚拟、可覆盖等。我想您可以始终拥有自己的user
实现IUser
(可能是由默认的User
类使用的UserBase
实现的IPrincipal
和IIdentity
)
void Application_Start(object sender, EventArgs e)
{
Roles.ApplicationName = "MyAppName";
if (!Roles.RoleExists("admin"))
Roles.CreateRole("admin");
if (!Roles.RoleExists("operator"))
Roles.CreateRole("operator");
if (!Roles.RoleExists("user"))
Roles.CreateRole("user");
}