226 lines
4.2 KiB
C#
226 lines
4.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Diplom_O.DataBase
|
|
{
|
|
public class Access
|
|
{
|
|
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
|
public int Id { get; set; }
|
|
[ForeignKey("User")]
|
|
public int UserId { get; set; }
|
|
public User User { get; set; }
|
|
public int FormId { get; set; }
|
|
public int FormatAccess { get; set; }
|
|
}
|
|
|
|
public static partial class FuncDB
|
|
{
|
|
public static void AccessCheckValid(Access obj)
|
|
{
|
|
try
|
|
{
|
|
if (obj == null) throw new Exception("Ошибка инициализации.");
|
|
if (UserGetById(obj.UserId) == null) throw new Exception("Пользователь не указан.");
|
|
if (obj.FormId < 0 || obj.FormId >= FormArray.formName.Length) throw new Exception("Неверно указана форма.");
|
|
if (obj.FormId < 0 || obj.FormatAccess >= FormArray.formAccess.Length) throw new Exception("Неверно указаны разрешения");
|
|
}
|
|
catch { throw; }
|
|
}
|
|
|
|
public static Access AccessGetById(int id)
|
|
{
|
|
try
|
|
{
|
|
using (var db = new MainDB())
|
|
{
|
|
var res =
|
|
from a in db.Accessy
|
|
where a.Id == id
|
|
select a;
|
|
try
|
|
{
|
|
return res.Single();
|
|
}
|
|
catch
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
public static Access[] AccessGetByUserIdFormId(int UserId, int FormId)
|
|
{
|
|
try
|
|
{
|
|
using (var db = new MainDB())
|
|
{
|
|
var res =
|
|
from a in db.Accessy
|
|
where a.UserId == UserId && a.FormId == FormId
|
|
select a;
|
|
try
|
|
{
|
|
return res.ToArray();
|
|
}
|
|
catch
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
public static Access AccessGetByUserIdFormIdAccessId(int UserId, int FormId, int AccessId)
|
|
{
|
|
try
|
|
{
|
|
using (var db = new MainDB())
|
|
{
|
|
var res =
|
|
from a in db.Accessy
|
|
where
|
|
a.UserId == UserId &&
|
|
a.FormId == FormId &&
|
|
a.FormatAccess == AccessId
|
|
select a;
|
|
try
|
|
{
|
|
return res.Single();
|
|
}
|
|
catch
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static void AccessAdd(Access obj)
|
|
{
|
|
try
|
|
{
|
|
AccessCheckValid(obj);
|
|
var local_obj = AccessGetByUserIdFormIdAccessId(obj.UserId, obj.FormId, obj.FormatAccess);
|
|
if (local_obj == null)
|
|
using (var db = new MainDB())
|
|
{
|
|
db.Accessy.Add(obj);
|
|
db.SaveChanges();
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
public static void AccessDelete(Access obj)
|
|
{
|
|
try
|
|
{
|
|
if (obj == null)
|
|
return;
|
|
var localObj = AccessGetById(obj.Id);
|
|
if (localObj == null)
|
|
throw new Exception("Разрешение не существует.");
|
|
using (var db = new MainDB())
|
|
{
|
|
db.Accessy.Remove(localObj);
|
|
db.SaveChanges();
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static Access[] AccessList(int UserId)
|
|
{
|
|
try
|
|
{
|
|
using (var db = new MainDB())
|
|
{
|
|
var access = (
|
|
from a in db.Accessy
|
|
where a.UserId == UserId
|
|
orderby a.FormId
|
|
orderby a.FormatAccess
|
|
select a
|
|
).ToArray();
|
|
return access;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
public static bool[,] AccessListTable(int UserId)
|
|
{
|
|
try
|
|
{
|
|
var result = new bool[FormArray.formName.Length, FormArray.formAccess.Length];
|
|
using (var db = new MainDB())
|
|
{
|
|
var list = AccessList(UserId);
|
|
foreach (var r in list)
|
|
result[r.FormId, r.FormatAccess] = true;
|
|
return result;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static int AccessToSettingsFullCountWithoutUserId(User user)
|
|
{
|
|
try
|
|
{
|
|
using (var db = new MainDB())
|
|
{
|
|
var users =
|
|
(from a in db.Usery
|
|
where a.Id != user.Id
|
|
select a).ToArray();
|
|
var count = 0;
|
|
foreach(var usr in users)
|
|
{
|
|
var access =
|
|
from a in db.Accessy
|
|
where
|
|
a.UserId == usr.Id &&
|
|
a.FormId == 7
|
|
select a;
|
|
if (access.Count() == FormArray.formAccess.Length)
|
|
count++;
|
|
}
|
|
return count;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
} |