コード例 #1
0
        public async Task <ActionResult <bool> > Set([FromRoute] string name, [FromBody] AccessUpdatePackage accessPack)
        {
            if (accessPack == null)
            {
                return(BadRequest("Missing body parameter: AccessUpdatePack"));
            }
            var table = GetTable(name);

            if (table == null)
            {
                return(NotFound());
            }
            if (table is IDBLogTable)
            {
                return(Forbid("History is Readonly!"));
            }
            var accessColumn = table.AccessKey;

            if (accessColumn == null)
            {
                return(BadRequest($"Table {table} is not Accessable!"));
            }
            var temp = new AccessValue(accessPack.Items);

            using (var transaction = new DBTransaction(table.Connection, CurrentUser))
            {
                try
                {
                    foreach (var id in accessPack.Ids)
                    {
                        var value = table.LoadItemById(id, DBLoadParam.Load, null, transaction);
                        if (value == null)
                        {
                            transaction.Rollback();
                            return(NotFound());
                        }
                        if (!accessColumn.Access.GetFlag(AccessType.Admin, CurrentUser) &&
                            !value.Access.GetFlag(AccessType.Admin, CurrentUser) &&
                            !table.Access.GetFlag(AccessType.Admin, CurrentUser))
                        {
                            transaction.Rollback();
                            return(Forbid());
                        }
                        value.Access = temp;
                        await value.Save(transaction);
                    }
                    transaction.Commit();
                    return(true);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    return(BadRequest(ex));
                }
            }
        }
コード例 #2
0
ファイル: CellEditorAccess.cs プロジェクト: radtek/datawf
        public override object ParseValue(object value, object dataSource, Type valueType)
        {
            temp = null;

            if (value is IAccessable)
            {
                temp = (AccessValue)((IAccessable)value).Access;
            }
            if (value is AccessValue)
            {
                temp = (AccessValue)value;
            }
            if (value is byte[])
            {
                temp = new AccessValue();
                temp.Read((byte[])value);
            }
            if (temp != null)
            {
                return(temp);
            }

            return(base.ParseValue(value, dataSource, valueType));
        }
コード例 #3
0
ファイル: TestORM.cs プロジェクト: radtek/datawf
        public async void Generate(DBConnection connection)
        {
            Assert.AreEqual(true, connection.CheckConnection(), $"Connection Fail!");
            schema = DBSchema.Generate(GetType().Assembly, SchemaName);

            Assert.IsNotNull(schema, "Attribute Generator Fail. On Schema");
            Assert.IsNotNull(Employer.DBTable, "Attribute Generator Fail. On Employer Table");
            Assert.IsNotNull(Position.DBTable, "Attribute Generator Fail. On Position Table");

            var idColumn = Employer.DBTable.Columns["id"];

            Assert.IsNotNull(idColumn, "Attribute Generator Fail. On Column Employer Id");
            var positionColumn = Employer.DBTable.Columns["positionid"];

            Assert.IsNotNull(positionColumn, "Attribute Generator Fail. On Column Employer Position");
            Assert.IsNotNull(positionColumn.ReferenceTable, "Attribute Generator Fail. On Column Employer Position Reference");
            schema.Connection = connection;

            schema.DropDatabase();
            schema.CreateDatabase();

            var result = schema.GetTablesInfo(connection.Schema, EmployerTableName);

            Assert.IsTrue(result.Count() == 1, "Generate Sql Table / Get Information Fail.");
            result = schema.GetTablesInfo(connection.Schema, PositionTableName);
            Assert.IsTrue(result.Count() == 1, "Generate Sql Table / Get Information Fail.");
            //Insert
            var employer = new Employer()
            {
                Identifier = $"{1:8}",
                Lodar      = true,
                Age        = 40,
                Height     = 180,
                LongId     = 120321312321L,
                Weight     = 123.12333F,
                DWeight    = 123.1233433424434D,
                Salary     = 231323.32M,
                Name       = "Ivan",
                Access     = new AccessValue(new[]
                {
                    new AccessItem(AccessValue.Groups.First(i => i.Id == 1), AccessType.Read),
                    new AccessItem(AccessValue.Groups.First(i => i.Id == 2), AccessType.Admin),
                    new AccessItem(AccessValue.Groups.First(i => i.Id == 3), AccessType.Create)
                })
            };

            Assert.AreEqual(employer.Type, EmployerType.Type2, "Default Value & Enum");

            employer.GenerateId();
            Assert.NotNull(employer.Id, "Id Generator Fail");

            await employer.Save();

            var qresult = schema.Connection.ExecuteQResult($"select * from {EmployerTableName}");

            Assert.AreEqual(1, qresult.Values.Count, "Insert sql Fail");
            Assert.AreEqual(employer.Id, qresult.Get(0, "id"), "Insert sql Fail Int");
            Assert.AreEqual(employer.Identifier, qresult.Get(0, "identifier"), "Insert sql Fail String");
            Assert.AreEqual((int?)employer.Type, qresult.Get(0, "typeid"), "Insert sql Fail Enum");
            Assert.AreEqual(employer.Age, qresult.Get(0, "age"), "Insert sql Fail Byte");
            Assert.AreEqual(employer.Height, qresult.Get(0, "height"), "Insert sql Fail Short");
            Assert.AreEqual(employer.LongId, qresult.Get(0, "longid"), "Insert sql Fail Long");
            Assert.AreEqual(employer.Weight, qresult.Get(0, "weight"), "Insert sql Fail Float");
            Assert.AreEqual(employer.DWeight, qresult.Get(0, "dweight"), "Insert sql Fail Double");
            Assert.AreEqual(employer.Salary, qresult.Get(0, "salary"), "Insert sql Fail Decimal");
            var lodar = qresult.Get(0, "lodar").ToString();

            Assert.IsTrue(lodar == "1" || lodar == "True", "Insert sql Fail Bool");
            Assert.IsInstanceOf <byte[]>(qresult.Get(0, "group_access"), "Insert sql Fail Byte Array");

            var accessValue = new AccessValue((byte[])qresult.Get(0, "group_access"));

            Assert.AreEqual(3, accessValue.Items.Count(), "Insert sql Fail Byte Array");
            Assert.AreEqual(true, accessValue.Items.ElementAt(0).Read, "Insert sql Fail Byte Array");
            Assert.AreEqual(true, accessValue.Items.ElementAt(1).Admin, "Insert sql Fail Byte Array");
            Assert.AreEqual(false, accessValue.Items.ElementAt(2).Delete, "Insert sql Fail Byte Array");

            Employer.DBTable.Clear();
            Assert.AreEqual(0, Employer.DBTable.Count, "Clear table Fail");

            //Insert Several
            Position.DBTable.Add(new Position()
            {
                Code = "1", Name = "First Position"
            });
            Position.DBTable.Add(new Position()
            {
                Code = "2", Name = "Second Position"
            });
            var position = new Position()
            {
                Id = 0, Code = "3", Name = "Group Position"
            };

            position.Attach();
            var sposition = new Position()
            {
                Code = "4", Parent = position, Name = "Sub Group Position"
            };

            sposition.Attach();

            //Select from internal Index
            Position.DBTable.Add(new Position()
            {
                Code = "t1", Name = "Null Index"
            });
            Position.DBTable.Add(new Position()
            {
                Code = "t2", Name = "Null Index"
            });
            Position.DBTable.Add(new Position()
            {
                Code = "t3", Name = "Null Index"
            });
            var nullIds = Position.DBTable.Select(Position.DBTable.PrimaryKey, CompareType.Is, null).ToList();

            Assert.AreEqual(6, nullIds.Count, "Select by null Fail");

            await Position.DBTable.Save();

            Position.DBTable.Clear();
            var positions = Position.DBTable.Load();

            Assert.AreEqual(7, positions.Count(), "Insert/Read several Fail");

            //GetById
            employer = Employer.DBTable.LoadById(1);
            Assert.IsNotNull(employer, "GetById Fail");
            position = Position.DBTable.LoadById(4);
            Assert.IsNotNull(position, "GetById Fail");
            //Update
            employer.Position = position;
            await employer.Save();

            qresult = schema.Connection.ExecuteQResult($"select * from {EmployerTableName}");
            Assert.AreEqual(4, qresult.Get(0, "positionid"), "Update sql Fail");


            connection.ExecuteQuery(@"create table test_table(
      id int primary key, 
      test_date date, 
      test_varchar varchar(512),
      test_numeric numeric(20,10))");

            result = schema.GetTablesInfo(connection.Schema, "test_table");
            schema.GenerateTablesInfo(result);
            var table = schema.Tables["test_table"] as DBTable <DBItem>;

            Assert.IsNotNull(table, "DBInformation Load Fail");

            table.Load().LastOrDefault();
            for (int i = 0; i < 1000; i++)
            {
                var row = table.NewItem();
                row["id"]           = i;
                row["test_date"]    = DateTime.Now.AddDays(-i);
                row["test_varchar"] = "string value " + i;
                row["test_numeric"] = i / 1000M;
                table.Add(row);
            }
            await table.Save();

            table.Clear();

            int c = 0;

            foreach (var item in table.Load(string.Empty))
            {
                if (++c == 5)
                {
                    break;
                }
            }
        }
コード例 #4
0
 /// <summary>Сохраняет новые настройки доступа на чтение и редактирование вики-страницы.</summary>
 /// <param name="pid">id вики-страницы</param>
 /// <param name="gid">id группы, где создана страница</param>
 /// <param name="view">значение настройки доступа на чтение; описание значений Вы можете узнать странице, посвященной методу pages</param>
 /// <param name="edit">значение настройки доступа на редактирование; описание значений Вы можете узнать странице, посвященной методу pages</param>
 /// <returns>Ответ сервера в XML или JSON формате.</returns>
 private VKResponseBase saveAccess(System.Int64? pid, System.Int64? gid, AccessValue? view, AccessValue? edit)
 {
     manager.AddValueByName("@pid", pid);
     manager.AddValueByName("@gid", gid);
     manager.AddValueByName("@view", view);
     manager.AddValueByName("@edit", edit);
     return new VKResponseBase(GetResponse("saveAccess"), IsXMLResponse);
 }
コード例 #5
0
 /// <summary>Сохраняет новые настройки доступа на чтение и редактирование вики-страницы.</summary>
 /// <param name="pid">id вики-страницы</param>
 /// <param name="gid">id группы, где создана страница</param>
 /// <param name="view">значение настройки доступа на чтение; описание значений Вы можете узнать странице, посвященной методу pages</param>
 /// <param name="edit">значение настройки доступа на редактирование; описание значений Вы можете узнать странице, посвященной методу pages</param>
 /// <returns>Ответ сервера в XML или JSON формате.</returns>
 public VKResponseBase SaveAccess(System.Int64? pid, System.Int64? gid, AccessValue? view = null, AccessValue? edit = null)
 {
     return saveAccess(pid, gid, view, edit);
 }
コード例 #6
0
 /// <summary>Редактирует данные видеозаписи на странице пользователя.</summary>
 /// <param name="vid">id видеозаписи</param>
 /// <param name="oid">id владельца видеозаписи</param>
 /// <param name="privacy_view">приватность на просмотр видео в соответствии с форматом приватности</param>
 /// <param name="privacy_comment">приватность на комментирование видео в соответствии с форматом приватности</param>
 /// <param name="name">название видеозаписи</param>
 /// <param name="desc">описание видеозаписи</param>
 /// <returns>Ответ сервера в XML или JSON формате.</returns>
 public VKResponseBase Edit(Id vid, System.Int64? oid, AccessValue? privacy_view = null, AccessValue? privacy_comment = null, string name = null, string desc = null)
 {
     return edit(vid, oid, name, desc, privacy_view, privacy_comment);
 }
コード例 #7
0
 /// <summary>Возвращает адрес сервера (необходимый для</summary>
 /// <param name="name">название видеофайла</param>
 /// <param name="description">описание видеофайла</param>
 /// <param name="gid">Группа, в которую будет сохранён видеофайл</param>
 /// <param name="privacy_view">приватность на просмотр видео в соответствии с форматом приватности</param>
 /// <param name="privacy_comment">приватность на комментирование видео в соответствии с форматом приватности</param>
 /// <returns>Ответ сервера в XML или JSON формате.</returns>
 private VKResponseBase save(string name, string description, System.Int64? gid, AccessValue? privacy_view, AccessValue? privacy_comment)
 {
     manager.AddValueByName("@name", name);
     manager.AddValueByName("@description", description);
     manager.AddValueByName("@gid", gid);
     manager.AddValueByName("@privacy_view", privacy_view);
     manager.AddValueByName("@privacy_comment", privacy_comment);
     return new VKResponseBase(GetResponse("save"), IsXMLResponse);
 }
コード例 #8
0
 /// <summary>Редактирует данные видеозаписи на странице пользователя.</summary>
 /// <param name="vid">id видеозаписи</param>
 /// <param name="oid">id владельца видеозаписи</param>
 /// <param name="name">название видеозаписи</param>
 /// <param name="desc">описание видеозаписи</param>
 /// <param name="privacy_view">приватность на просмотр видео в соответствии с форматом приватности</param>
 /// <param name="privacy_comment">приватность на комментирование видео в соответствии с форматом приватности</param>
 /// <returns>Ответ сервера в XML или JSON формате.</returns>
 private VKResponseBase edit(Id vid, System.Int64? oid, string name, string desc, AccessValue? privacy_view, AccessValue? privacy_comment)
 {
     manager.AddValueByName("@vid", vid);
     manager.AddValueByName("@oid", oid);
     manager.AddValueByName("@name", name);
     manager.AddValueByName("@desc", desc);
     manager.AddValueByName("@privacy_view", privacy_view);
     manager.AddValueByName("@privacy_comment", privacy_comment);
     return new VKResponseBase(GetResponse("edit"), IsXMLResponse);
 }
コード例 #9
0
 /// <summary>Возвращает адрес сервера (необходимый для</summary>
 /// <param name="name">название видеофайла</param>
 /// <param name="gid">Группа, в которую будет сохранён видеофайл</param>
 /// <param name="description">описание видеофайла</param>
 /// <param name="privacy_view">приватность на просмотр видео в соответствии с форматом приватности</param>
 /// <param name="privacy_comment">приватность на комментирование видео в соответствии с форматом приватности</param>
 /// <returns>Ответ сервера в XML или JSON формате.</returns>
 public VKResponseBase Save(string name, System.Int64? gid, string description = null, AccessValue? privacy_view = null, AccessValue? privacy_comment = null)
 {
     return save(name, description, gid, privacy_view, privacy_comment);
 }
コード例 #10
0
ファイル: UserRegItem.cs プロジェクト: radtek/datawf
        public void RefereshText(IUserIdentity user)
        {
            string _textCache = "";

            if (_textCache?.Length == 0 && LogItem != null)
            {
                var logPrevius = LogItem.GetPrevius();
                foreach (var logColumn in LogTable.GetLogColumns())
                {
                    var column = logColumn.BaseColumn;
                    if ((column.Keys & DBColumnKeys.Stamp) == DBColumnKeys.Stamp)
                    {
                        continue;
                    }
                    var oldValue = logPrevius?.GetValue(logColumn);
                    var newValue = LogItem.GetValue(logColumn);
                    if (DBService.Equal(oldValue, newValue))
                    {
                        continue;
                    }
                    var oldFormat = column.Access.GetFlag(AccessType.Read, user) ? column.FormatValue(oldValue) : "*****";
                    var newFormat = column.Access.GetFlag(AccessType.Read, user) ? column.FormatValue(newValue) : "*****";
                    if (oldValue == null && newValue != null)
                    {
                        _textCache += string.Format("{0}: {1}\n", column, newFormat);
                    }
                    else if (oldValue != null && newValue == null)
                    {
                        _textCache += string.Format("{0}: {1}\n", column, oldFormat);
                    }
                    else if (oldValue != null && newValue != null)
                    {
                        if ((column.Keys & DBColumnKeys.Access) == DBColumnKeys.Access)
                        {
                            string rez      = string.Empty;
                            var    oldAcces = new AccessValue((byte[])oldValue);
                            var    newAcces = new AccessValue((byte[])newValue);
                            foreach (var oAccess in oldAcces.Items)
                            {
                                var nAceess = newAcces.Get(oAccess.Group);
                                if (nAceess.Equals(AccessItem.Empty))
                                {
                                    rez += string.Format("Remove {0}; ", oAccess);
                                }
                                else if (!nAceess.Equals(oAccess))
                                {
                                    rez += string.Format("Change {0}({1}{2}{3}{4}{5}{6}); ", oAccess.Group,
                                                         oAccess.Read != nAceess.Read ? (nAceess.Read ? "+" : "-") + "View " : "",
                                                         oAccess.Update != nAceess.Update ? (nAceess.Update ? "+" : "-") + "Edit " : "",
                                                         oAccess.Create != nAceess.Create ? (nAceess.Create ? "+" : "-") + "Create " : "",
                                                         oAccess.Delete != nAceess.Delete ? (nAceess.Delete ? "+" : "-") + "Delete " : "",
                                                         oAccess.Admin != nAceess.Admin ? (nAceess.Admin ? "+" : "-") + "Admin " : "",
                                                         oAccess.Accept != nAceess.Accept ? (nAceess.Accept ? "+" : "-") + "Accept" : "");
                                }
                            }
                            foreach (var nAccess in newAcces.Items)
                            {
                                var access = oldAcces.Get(nAccess.Group);
                                if (!access.Equals(AccessItem.Empty))
                                {
                                    rez += string.Format("New {0}; ", nAccess);
                                }
                            }
                            _textCache += string.Format("{0}: {1}", column, rez);
                        }
                        else if (column.DataType == typeof(string))
                        {
                            var diffs = DiffResult.DiffLines(oldFormat, newFormat);
                            var buf   = new StringBuilder();
                            foreach (var diff in diffs)
                            {
                                string val = diff.Result.Trim();
                                if (val.Length > 0)
                                {
                                    buf.AppendLine(string.Format("{0} {1} at {2};", diff.Type, val, diff.Index, diff.Index));
                                }
                            }
                            _textCache += string.Format("{0}: {1}\r\n", column, buf);
                        }
                        else
                        {
                            _textCache += string.Format("{0}: Old:{1} New:{2}\r\n", column, oldFormat, newFormat);
                        }
                    }
                }
            }
        }