假设我有一个 ASP.Net MVC 应用程序,这个应用程序 (UI) 引用了一个业务逻辑层 (BLL),而 BLL 引用了我的数据访问层 (DAL)。
我正在使用自定义成员资格和角色提供程序进行授权。
我正在尝试确定哪些层需要引用我的会员资格提供者。
在 MVC 中,您可以通过以下方式执行授权检查:
[Authorize(Roles = "SomeRoleName")]
public ActionResult Index()
{
//do something
}
在我的 BLL 中,我可能想检查用户是否也处于角色中:
public static bool IsRoleEditor(User user, Role userRole)
{
bool retValue = false;
if (user.Application.AppID == UserRole.Application.AppID)
{
if (Roles.IsUserInRole("ModifyRoles"))
{
retValue = true;
}
return retValue;
}
如果我这样做,我将不得不在两个层中引用和实例化 Membership 类。这是构建这样的应用程序的正确方法吗?似乎有很多冗余。
由于我有 BLL,我是否应避免使用“[Authorize(Roles = "SomeRoleName")]”属性,而是从 MVC 代码中调用 BLL 函数来检查用户是否处于角色中?如果我这样做,MVC 仍然需要对成员资格提供程序的引用以进行身份验证,并且无论如何都要利用登录和其他 ASP 控件,对吗?
我是否偏离了基地并朝着错误的方向前进?