流畅的NHibernate行级安全实施 - 太粗略了?

时间:2011-01-21 02:49:27

标签: security nhibernate fluent

此过滤器代码的工作方式符合我的要求(仅加载与当前登录客户相关的时间票据。)有两件事让我担心:

  1. collate Latin1_General_CI_AS添加到列名称。我已经读过其他地方NHibernate不支持加入多个校对,所以我担心意外的副作用。
  2. this_1_:我总是能够依赖正在使用的表别名吗?

  3. public class TimeTicketMap : ClassMap<TimeTicket>
        {
            public TimeTicketMap()
            {
                Id(x => x.TicketID).GeneratedBy.Identity();
                Join("CONTRACTS", x =>
                                       {
                                    x.KeyColumn("CONTRACT collate Latin1_General_CI_AS");
                                    Id(y => y.JobNumber).Column("Job");
                                    x.Map(y => y.Customer);
                                });
                ApplyFilter<CustomerFilter>("this_1_.Customer = :customer");
            }
        }
    

    Fluent / NHibernate的专家能不能告诉我这个,或者在告诉我可能不会遇到严重问题时不以为然地做鬼脸?

1 个答案:

答案 0 :(得分:0)

我最终将校对添加到Sql方言中,因此不会将其视为列,并使用存在过滤器(效率较低,但我知道我可以依赖它。)

public class CustomSqlDialect : MsSql2005Dialect
{
    public CustomSqlDialect()
    {
        RegisterKeyword("Latin1_General_CI_AS");
    }
}

mapping.ApplyFilter<CustomerFilter>
    (@"exists (SELECT cont.CUSTOMER FROM CONTRACTS cont 
               WHERE cont.CUSTOMER = :customer 
               AND Job COLLATE SQL_Latin1_General_CI_AS = cont.CONTRACT");