【发布时间】:2013-12-11 14:06:28
【问题描述】:
我有一个带有 Entity Framework 5 的 MVC 4 Web 应用程序。
我一直在尝试为具有完全不同类型的访问权限的角色实施授权,但想使用我自己的数据库结构。我已经编写了自定义成员资格和角色提供程序,并实现了它们。
我认为我没有成功地实现这些提供程序,或者没有正确禁用 simplemembership。
当我将 [Authorize(Roles = "Admin")] 属性应用于控制器时,我收到以下错误消息:
“/”应用程序中的服务器错误。 找不到存储过程“dbo.aspnet_CheckSchemaVersion”。
我要做的就是在允许对面板进行任何访问之前检查经过身份验证的用户是否具有管理员角色。
我的 Web.config:
<system.web>
<roleManager enabled="true" defaultProvider="CustomRoleProvider" cacheRolesInCookie="true">
<providers>
<clear />
<add name="CustomRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="CostaPropertyServices" />
</providers>
</roleManager>
我的 CustomRoleProvider:
namespace CostaPropertyServices.Models
{
public class CustomRoleProvider : RoleProvider
{
.... // Code skipped for brevity
public override string[] GetRolesForUser(string username)
{
using (var db = new PropertyInfoEntities())
{
var user = db.Users.SingleOrDefault(u => u.Username == username);
if (user == null)
return new string[] { };
return user.Roles == null ? new string[] { } :
user.Roles.Select(u => u.Name).ToArray();
}
}
public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}
public override bool IsUserInRole(string username, string roleName)
{
using (var db = new PropertyInfoEntities())
{
var user = db.Users.SingleOrDefault(u => u.Username == username);
if (user == null)
return false;
return user.Roles != null && user.Roles.Any(r => r.Name == roleName);
}
}
有谁知道我做错了什么? 谢谢。
编辑:
我认为问题是自从找到this similar question 后我没有正确连接会员提供程序,但找不到我出错的地方。
【问题讨论】:
标签: asp.net asp.net-mvc-4 asp.net-membership roleprovider