Документ описывает, как добавить в приложение поддержку Филиальности. Назначение пользователям филиалов и прав а также настройка филиальных объектов производится непосредственно в приложении.

Поддержка филиальности в приложении

Рассмотрим пошаговое внедрение Филиальности на примере приложения Xafari.BCDemo.Win. Предположим, что стоит задача разграничить доступ в зависимости от филиала к объекту MyPersistentClass. Необходимо выполнить следующее:

Добавить модули: Xafari.Security, Xafari.BC и Xafari.BC.Win.

Проинициализировать менеджер филиалов. Для этого перекрыть метод OnSetupComplete в WinApplication:

 

protected override void OnSetupComplete()

{

base.OnSetupComplete();

BranchesManager.InitializeBranchManager(this);

}

 

Обязательным условием работы филиальности является использование SecuredObjectSpaceProvider:

 

protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args)

{

args.ObjectSpaceProvider = new SecuredObjectSpaceProvider((SecurityStrategy)this.Security, args.ConnectionString, args.Connection);

}

 

Тип роли в системе безопасности должен реализовывать интерфейс DCBranchPermissionsSupport. Xafari предоставляет готовые к использованию типы Xafari.BC.Branches.Security.XPOBranchSecuritySystemUser и Xafari.Security.Strategy.DC.IDCSecuritySystemUser (последний расширяется механизмом EF).

Далее следует указать филиальные бизнес-объекты.

Поддержка филиальности для объекта

На этом этапе необходимо принять решение, какие сущности должны быть филиальными.

Для того, чтобы объект поддерживал филиальность, необходимо реализовать в нём интерфейс Xafari.BC.Branches.IBranchSupport или использовать в качестве базового класса объект с готовой реализацией этого интерфейса.

Если Модель Данных приложения построена на Domain Components, то можно наследоваться от Xafari.BC.CD.XafariObject. Имеется еще один полезный тип - Xafari.BC.Branches.ВСBranchSupport, он более общий, реализует только IBranchSupport.

Для Модели Данных XPO используйте Xafari.BC.XPO.XafariBaseObject.

Замечание

Возможна ситуация, когда приходится работать с классом, который унаследовал реализацию IBranchSupport и при этом не нуждается в функции Филиальности. Такой класс следует пометить атрибутом Xafari.BC.Branches.ForceBranchSupportDisableAttribute. После этого включить Филиальность для него в приложении станет невозможно.