0

MVC5アプリケーションでカスタムロールマネージャーを実装しようとしていますが、これは次のCustom Role Provider Tutorialを使用しています。カスタムロールマネージャー/プロバイダー

必要な2つの機能をオーバーライドしてカスタムロールプロバイダを作成しました。

namespace Models.Security 
{ 
public class CustomRoleProvider : RoleProvider 
{ 
/// logic 
public override string[] GetRolesForUser(string username) 
    { 
/// logic 
public override bool IsUserInRole(string username, string roleName) 
    { 
私は、この新しいプロバイダを使用するように私のウェブ設定を変更する必要が

...

<system.web> 
<compilation debug="true" targetFramework="4.5.2" /> 
<httpRuntime targetFramework="4.5.2" /> 
<roleManager enabled="true" defaultProvider="CustomRoleProvider"> 
    <providers> 
    <clear /> 
    <add name="CustomRoleProvider" type="Models.Security.CustomRoleProvider"/> 
    </providers> 
</roleManager> 

しかし、私は試してみて、私は次のエラーを取得私のアプリケーションにアクセスする場合:

パーサーエラーをメッセージ:タイプ 'Models.Security.CustomRoleProvider'を読み込めませんでした。

Source Error: 

Line 29:  <providers> 
Line 30:   <clear /> 
Line 31:   <add name="CustomRoleProvider" type="Models.Security.CustomRoleProvider"/> 
Line 32:  </providers> 
Line 33:  </roleManager> 

は、私の知る限りでは、私が必要とするすべてのものをやっている知っていますと。別の唯一の事は私がADにリンクしているカスタムメンバーシップを使用していることです

<authentication mode="Forms"> 
    <forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="200" slidingExpiration="false" protection="All" /> 
</authentication> 
<membership defaultProvider="ADMembershipProvider"> 
    <providers> 
    <clear /> 
    <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" /> 
    </providers> 
</membership> 

何か他に必要なことはありますか? MVC5はアプローチを変更しましたか?

答えて

0

はい。 MVC 5はアイデンティティを使用し、ロールプロバイダはASP.NETメンバーシップコンセプトです。 ロールを制御するため、Identityでロールプロバイダは必要ありません。あなたのプロジェクトのエンティティです(少なくともサブクラスをIdentityRoleにすることもできます)。何でもできます。

+0

2つの間を移動する簡単な方法はありますか?アイデンティティロールのスパンページで見つかった/使用しているすべての例私はアクションのAuthorization属性に対してチェックしたいロールとアクションを持つカスタムテーブルを作成しました。私は本当にUserPrincipalオブジェクトに対してすべてのロールを保存してログインし、セッション中にそれを使用したいと思っています。 –

0

引き続きroleManagerとカスタムロールプロバイダを使用できます。プリンシパルをRolePrincipalと入力するだけでよいのです。 IAuthenticationFilterでこれを行い、global.asaxに登録することができます。いくつかのサンプルコードについては、次の2つのリンクを参照してください。 RolePrincipal/ IAuthenticationFilter