public FunctionalPermission Put(FunctionalPermission request)
		{
			FunctionalPermissionEntity entity = request.TranslateToEntity();

			entity = GenericRepository.Add(AuthAdminDatabase, FunctionalPermissionsCollection, entity);

			return entity.TranslateToResponse();
		}
		public FunctionalPermission Post(FunctionalPermission request)
		{
			FunctionalPermissionEntity entity = request.TranslateToEntity();

			if (entity.Id == 0)
				entity.Id = GenericRepository.GetMaxIdIncrement<FunctionalPermissionEntity>(AuthAdminDatabase, FunctionalPermissionsCollection);

			entity = GenericRepository.Add(AuthAdminDatabase, FunctionalPermissionsCollection, entity);

			return entity.TranslateToResponse();
		}
		public FunctionalPermission Get(FunctionalPermission request)
		{
			if (request.Id != 0)
			{
				FunctionalPermissionEntity entity = GenericRepository.GetItemTopById<FunctionalPermissionEntity>(AuthAdminDatabase, FunctionalPermissionsCollection, request.Id);

				if (entity == null)
					return null;

				return entity.TranslateToResponse();
			}

			return null;
		}
        public void MainTest()
        {
            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction()) {
                    var r1 = new Role(globalId1)
                    {
                        Name = "1"
                    };
                    var r2 = new Role(globalId2)
                    {
                        Name = "2"
                    };

                    var de = new Document(Guid.NewGuid())
                    {
                        SysName = "Control"
                    };

                    var p1 = new FunctionalPermission(globalId3)
                    {
                        FullControl = false, Read = true, Name = "q", Entity = de, Role = r1
                    };
                    var p2 = new FunctionalPermission(globalId4)
                    {
                        FullControl = true, Read = false, Delete = true, Name = "q", Entity = de, Role = r2
                    };
                    t.Complete();
                }

            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction()) {
                    Assert.IsFalse(FunctionalPermission.CanRead("Control", new string[] { }));
                    Assert.IsTrue(FunctionalPermission.CanRead("Control", new[] { "1" }));
                    Assert.IsFalse(FunctionalPermission.CanControl("Control", new[] { "1" }));
                    Assert.IsFalse(FunctionalPermission.CanCreate("Control", new[] { "1", "2" }));
                    Assert.IsFalse(FunctionalPermission.CanRead("Control", new[] { "1", "2" }));
                    Assert.IsTrue(FunctionalPermission.CanDelete("Control", new[] { "1", "2" }));

                    var roles = new[] { "1", "2" };
                    var q     = from perm in session.Query.All <RowLevelPermission>()
                                where perm.Role.Name.In(roles) && perm.Fields.Any(m => m.Linked.SysName == "Control")
                                select perm;
                    var result = q.ToList();
                }
        }
		public FunctionalPermission Delete(FunctionalPermission request)
		{
			GenericRepository.DeleteById<FunctionalPermissionEntity>(AuthAdminDatabase, FunctionalPermissionsCollection, request.Id);

			return null;
		}