Свободная реализация безопасности на уровне строк в NHibernate - слишком схематично? - PullRequest
0 голосов
/ 21 января 2011

Этот код фильтра работает так, как я хочу (загружает только билеты на время, относящиеся к клиенту, вошедшему в данный момент). Меня беспокоит две вещи:

  1. Добавление collate Latin1_General_CI_AS к имени столбца,Я читал другие места, где NHibernate не поддерживает объединение нескольких параметров сортировки, поэтому я обеспокоен тем, какие непреднамеренные побочные эффекты.
  2. this_1_: смогу ли я всегда полагатьсяна этом столе используется псевдоним?

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 голосов
/ 28 января 2011

Я закончил тем, что добавил сортировку в диалект 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...