0

我拥有的是用户类,并说还有 2 个子类 vipUser 和常规用户。在登录页面中,我想检查身份验证,但我不知道它是 vipUser 还是常规用户 .. 如果它是 vip,则重定向到一个位置,如果它是常规到另一个位置。身份验证方法必须在 User 类上才能获得某些资源 - 如下所示:

 Function Authenticate(ByVal username As String, ByVal password As String) As User Implements IMindriUserDao.Authenticate
        Return MyBase.GetUniqueByCriteria(Restrictions.Where(Of User)(Function(x) x.Username = username AndAlso x.Password = password))
 End Function

问题是,在我从 nhibernate 获得与用户的身份验证后,我现在想检查他是 vip 还是常规用户,但用户已经作为用户在缓存中,没有强制转换选项来检查用户是什么类型...有什么建议么?!

希望我足够清楚..

谢谢!

4

2 回答 2

1

2个选项:多态性任意映射

多态性(对不起,我是 c# 但我不熟悉 VB.NET)

class User
{
    public virtual IsVip { get { return false; } }
}

class VipUser
{
    public override IsVip { get { return true; } }
}

Any-Mapping:在你有延迟加载用户引用的任何地方

公共 EntityMap() { ReferencesAny(x => x.User) }

于 2011-08-24T13:40:50.217 回答
0

Are you sure? The user object should be the correct concrete type and you should be able to use the is or as operators to check.

var user = Authenticate("userid", "password");
var vipUser = user as vipUser;
if (vipUser != null) { RedirectToChampagneRoom(); }

That said, it's much easier to work with role properties that subclassing, i.e. User.UserType.

于 2011-08-24T14:14:40.037 回答