MVC4アプリで詳細な承認を処理するために作成されたカスタムAuthorizeAttributeクラスがあります。
これはクラスです:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class isAuthorized : AuthorizeAttribute
{
public oRoles enRole;
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authorized = base.AuthorizeCore(httpContext);
string test = enRole.ToString();
if (!authorized)
{
// The user is not authenticated
return false;
}
var user = httpContext.User;
bool bFlag = AuthCheck.CheckUser(httpContext, enRole);
if (bFlag) // I know this is a lot of code; it's for debugging purposes
return true;
return false;
}
}
コード支援を可能にするために、次の列挙型が宣言されています。
public enum oRoles
{
StudentSelfPassword = 1,
StaffSelfPassword = 2,
StudentLookup = 3,
StudentChangeRequest = 4,
StudentAdmin = 5,
StaffLookup = 6,
StaffChangeRequest = 7,
StaffAdmin = 8,
ChangeQueueApproval = 9
}
私のコントローラーでは、次の方法でAuthorizeAttributeを呼び出します。
[isAuthorized(enRole = oRoles.StudentLookup)]
[isAuthorized(enRole = oRoles.StaffLookup)]
[isAuthorized(enRole = oRoles.StudentChangeRequest)]
[isAuthorized(enRole = oRoles.StaffChangeRequest)]
デバッガーで実行すると、最初のisAuthorizedが実行されてtrueを返し(必要に応じて)、2番目のisAuthorizedに進み、falseを返し、すぐに認証を求められます。最初の条件が真だったので、私はそれが許されることを期待していました。しかし、私の仮定は正しくなかったようです。
元々、ドメイン内のグループであるRoles = "change、admin"があり、それは機能しましたが、グループは静的ではなく動的に割り当てる必要がありました。そこに複数のアイテムをプッシュすることができました。文字列として送信されていたからですか?
基本的にisAuthorized(...)を実行する方法はありますか|| isAuthorized(...)|| isAuthorized(...)1つの条件が真の場合、それはokとして検証されますか?