using System;
using System.Collections.Generic;
using System.Query;
using System.Text;
using Bilgi.Common.Utils;
using Bilgi.Org.Core.DataInterfaces;
using Bilgi.Org.Core.Domain;
using Bilgi.Org.Data;
using Bilgi.Calendar.Core.Accessibility.DataInterfaces;
using Bilgi.Calendar.Core.Accessibility.Domain;
using Bilgi.Calendar.Core.Space.DataInterfaces;
using Bilgi.Calendar.Core.Space.Domain;
namespace Bilgi.Calendar.Core
{
public sealed class UserSessionDataProvider
{
private DaoFactoryExposer _daoFactoryExposer = new DaoFactoryExposer();
private IList<SpaceAccessibility> _spaceAccessibilities = null;
private IList<OrgUnit> _inUnits = null;
private IList<BaseSpace> _ownedSpaces = null;
private IList<UnitSpace> _unitSpaces = null;
private IOrgUserDao _userDao = new OrgUserDao();
public IOrgUserDao UserDao
{
// Some code
}
private IOrgUserUnitRoleDao _userUnitRoleDao = new OrgUserUnitRoleDao();
public IOrgUserUnitRoleDao UserUnitRoleDao
{
// Some code
}
private ISpaceAccessibilityDao _spaceAccessDao = null;
public ISpaceAccessibilityDao SpaceAccessDao
{
// Some code
}
private ISpaceDao _spaceDao = null;
public ISpaceDao SpaceDao
{
// Some code
}
private int _userID = -1;
public int UserID
{
// Some code
}
public OrgUser User
{
// Some code
}
private void CheckValidUser( )
{
// Some code
}
public void LogOnSecure( string username, string hashedPwd, Hash.ServiceProviderEnum hashServiceProvider )
{
// Some code
}
public void LogOn( string username, string clearTextPwd )
{
// Some code
}
/// <summary>
/// LogOn olmuş kullanıcının session'da taşınacak ve bir anlamda cachelenecek olan
/// tüm bilgilerini yüklemek için kullanılır.
/// Bu aşamada alınan tüm bilgiler sorgulamalarda kullanılmaktadır.
/// </summary>
public void LoadUserSessionData()
{
// Some code
}
/// <summary>
/// LogOn olmuş kullanıcı için tanımlı tüm alan erişim bilgilerini yükler.
/// Alan erişimi ile ilgili sorgular bu bilgi üzerinden yapılır.
/// </summary>
private void LoadUserSpaceAccessibilities()
{
// Some code
}
/// <summary>
/// LogOn olmuş kullanıcının MEMBER rolünde bulunduğu birimleri yüklemek için kullanılır
/// </summary>
private void LoadUserUnits()
{
// Some code
}
/// <summary>
/// LogOn olmuş olan kullanıcının sahibi olduğu veya MEMBER rolünde
/// olduğu için dolaylı olarak erişebileceği alanları yüklemek için kullanılır
/// </summary>
private void LoadPersonalAndUnitSpaces()
{
// Some code
}
public UserAccessibilityData GetUserSpaceAccess(BaseSpace space)
{
/*
* 1- Alanın kullanıcıya ait bir alan olup olmadığını kontrol ediyoruz.
* Eğer alan kullanıcıya aitse kullanıcının full erişime sahip olduğunu
* varsayarak ilgili bilgiyi döndürüyoruz.
*/
var s = from os in _ownedSpaces
where os.ID == space.ID
select os;
if( s != null )
{
UserAccessibilityData data = new UserAccessibilityData();
data.ApplyFullAccess();
data.IsOwned = true;
return data;
}
/*
* 2- Kullanıcı için tanımlanmış bir erişim bilgisi var mı kontrol ediyoruz.
* Eğer erişim tanımı varsa bu tanımın kullanılacağını varsayıp bilgiyi döndürüyoruz.
*/
var spaceAcces = from sa in _spaceAccessibilities
where sa.SpaceID == space.ID && sa.UserID == _userID
select sa;
if( spaceAcces.Count<SpaceAccessibility>() > 0 )
{
UserAccessibilityData data = new UserAccessibilityData();
data.InheritedFromUnit = false;
data.IsOwned = false;
SpaceAccessibility sa = spaceAcces.ElementAt<SpaceAccessibility>(0);
data.CopyFrom(sa);
return data;
}
/*
* 3- Kullanıcının MEMBER rolünde olduğu birimler için yapılmış
* erişim tanımı var mı kontrol ediyoruz.
* Kullanıcının içinde olduğu birimlerden hangisinin erişim yetkisi
* daha büyükse o erişim yetkisi ile ilgili bilgiler döndürülür.
*/
var inUnits = from u in _inUnits
select u.ID;
var unitAccess = from sa in _spaceAccessibilities
where sa.SpaceID == space.ID && inUnits.Contains<int>(sa.UnitID ?? -1)
select sa;
if( unitAccess.Count<SpaceAccessibility>() > 0 )
{
UserAccessibilityData data = new UserAccessibilityData();
data.InheritedFromUnit = true;
foreach(SpaceAccessibility sa in unitAccess )
{
data.Or(sa);
}
return data;
}
return null;
}
}
}