private PermissionSetDO GetOrCreateDefaultSecurityPermissionSet(string dataObjectType, List <PermissionType> customPermissionTypes = null)
        {
            // this method use injected UnitOfWork instance in order to work properly once being called from MigrationConfiguration
            var defaultPermissions = customPermissionTypes?.Select(x => (int)x).ToArray()
                                     ?? new[] { (int)PermissionType.ReadObject, (int)PermissionType.EditObject, (int)PermissionType.CreateObject, (int)PermissionType.DeleteObject, (int)PermissionType.RunObject };

            var defaultPermissionsCount = defaultPermissions.Length;
            //check for existing permission set with this default permissions
            var permissionSet = _uow.PermissionSetRepository.GetQuery().FirstOrDefault(x => x.ObjectType == dataObjectType && x.Permissions.Count == defaultPermissionsCount &&
                                                                                       x.Permissions.All(t => defaultPermissions.Contains(t.Id)));

            if (permissionSet != null)
            {
                return(permissionSet);
            }

            permissionSet = new PermissionSetDO()
            {
                Id         = Guid.NewGuid(),
                Name       = Roles.OwnerOfCurrentObject,
                ObjectType = dataObjectType,
            };
            var repo = new GenericRepository <_PermissionTypeTemplate>(_uow);

            foreach (var permission in defaultPermissions)
            {
                permissionSet.Permissions.Add(repo.GetQuery().FirstOrDefault(x => x.Id == permission));
            }

            _uow.PermissionSetRepository.Add(permissionSet);

            _uow.SaveChanges();

            return(permissionSet);
        }
 public RolePermission()
 {
     PermissionSet = new PermissionSetDO();
     Role          = new RoleDO();
 }