2013-12-11 79 views
1

我有實體框架5一個MVC 4 web應用程序。自定義角色提供程序找不到存儲過程'dbo.aspnet_CheckSchemaVersion'。上[授權(角色= 「管理員」)]屬性

我一直在嘗試使用完全不同類型的訪問來實現角色授權,但希望使用我自己的數據庫結構。我編寫了自定義的成員資格和角色提供者,並實施了它們。

我不認爲我已經設法正確實施這些提供者,或者沒有正確禁用簡單成員。

當我應用[授權(角色=「管理員」)]屬性到一個控制器時,得到以下錯誤消息:

在服務器錯誤/應用程序。 找不到存儲過程'dbo.aspnet_CheckSchemaVersion'。

我想要做的就是在允許任何訪問面板之前檢查經過身份驗證的用戶是否處於Admin角色。

我的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); 
      } 
     } 

有誰知道我做錯了嗎? Thankyou。

編輯:

我想的問題是,我還沒有發現,因爲正確this similar question有線了成員資格提供程序,但找不到在哪裏我已經錯了。

回答

2

根據您的web.config文件,您沒有使用自定義角色提供程序。

類型應該是type="CostaPropertyServices.Models.CustomRoleProvider, CostaPropertyServices"

<system.web> 
    <roleManager enabled="true" defaultProvider="CustomRoleProvider" 
     cacheRolesInCookie="true"> 
    <providers> 
     <clear /> 
     <add name="CustomRoleProvider" 
      type="CostaPropertyServices.Models.CustomRoleProvider" 
      connectionStringName="DefaultConnection" 
      applicationName="CostaPropertyServices" /> 
    </providers> 
    </roleManager> 
+0

早知道它會是一個愚蠢的錯誤那樣!我被困在這2天哈哈!謝謝贏 –

1

如果你已經實現了新的ASP.NETIdentity那麼你正在尋找的是:

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())); 
相關問題