我创建了一个自定义 AuthorizeAttribute 类来处理我的 MVC4 应用程序中的精细授权。
这是课程:
[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(应该如此)并继续到第二个 isAuthorized 返回 false 然后立即要求我进行身份验证。我期待它允许,因为第一个条件是真的。但是,看来我的假设是不正确的。
最初,我有 Roles =“change,admin”,它们是域中的组,它可以工作,但是这些组需要在分配时是动态的,而不是静态的。我可以在那里推送多个项目。那是因为它是作为字符串发送的吗?
有没有办法基本上做一个 isAuthorized(...) || isAuthorized(...) || isAuthorized(...) 这样如果一个条件为真,它就被验证为正常?