Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IsInRole-customRoleProvider的问题_C#_Silverlight_Roleprovider - Fatal编程技术网

C# IsInRole-customRoleProvider的问题

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

我在周末实现了一个带有自定义身份验证的自定义RoleProvider。使用Silverlight业务模板,我能够在服务请求上添加[RequiresRole(“Admin”)]属性:

[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");
}