using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using System.Xml.Serialization;
using DSWeb.SoftMng.BLL;
using DSWeb.SoftMng.DBUtility;
using DSWeb.SoftMng.Model;
using DSWeb.SoftMng.Filter;
using DSWeb.Areas.CommMng.Models;
using DSWeb.TruckMng.Helper.Repository;
using HcUtility.Comm;
using DSWeb.EntityDA;
using DSWeb.Models;
using Newtonsoft.Json;
using DSWeb.Areas.CommMng.DAL;
using DSWeb.Areas.SysMng.DAL.SysUser;
namespace DSWeb.SoftMng.Controllers
{
public class AuthController : Controller
{
private readonly sys_secCompanyServerBLL _bll = new sys_secCompanyServerBLL();
private readonly sys_secModuleServerBLL _mbll = new sys_secModuleServerBLL();
private readonly info_clientServerBLL _cbll = new info_clientServerBLL();
private readonly sys_moduleServerBLL _ibll = new sys_moduleServerBLL();
#region View
///
/// 首页
///
///
//[ModuleAuthFilter(Name = "secRegist")]//过滤器
public ActionResult Index()
{
if (Session["CODENAME"] == null)
Response.Redirect("/login.aspx");
ViewData["CODENAME"] = Session["CODENAME"];
return View();
}
///
/// 角色权限
///
///
public ActionResult RoleAuth()
{
if (Session["CODENAME"] == null)
Response.Redirect("/login.aspx");
ViewData["CODENAME"] = Session["CODENAME"];
return View();
}
///
/// 角色权限范围
///
///
public ActionResult RoleAuthRange()
{
if (Session["CODENAME"] == null)
Response.Redirect("/login.aspx");
ViewData["CODENAME"] = Session["CODENAME"];
return View();
}
///
/// 用户角色
///
///
public ActionResult UserRole()
{
if (Session["CODENAME"] == null)
Response.Redirect("/login.aspx");
ViewData["CODENAME"] = Session["CODENAME"];
return View();
}
#endregion
#region Handler
///
/// 获取列表
///
/// 开始索引
/// 分页大小
/// 搜索框的值
/// 排序字段
/// 排序方式
///
[SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器
public JsonResult GetList(int startIndex, int limit, string search, string sortName, string sortOrder,string companyId, string opUser, string question,string beginRegCount_1, string beginRegCount_2, string beginDate_1, string beginDate_2)
{
StringBuilder where = new StringBuilder();
where.Append("1=1");
if (!(String.IsNullOrEmpty(opUser) || String.IsNullOrWhiteSpace(opUser)))
{
//search=Common.Common.string_Encrypt(search, "Dw9pVb9r");
where.Append(string.Format(" And OperUser like '%{0}%'", opUser));
}
if (!(String.IsNullOrEmpty(beginDate_1) || String.IsNullOrWhiteSpace(beginDate_1)))
{
//search=Common.Common.string_Encrypt(search, "Dw9pVb9r");
where.Append(string.Format(" And OperTime>='{0}'", beginDate_1));
}
if (!(String.IsNullOrEmpty(beginDate_2) || String.IsNullOrWhiteSpace(beginDate_2)))
{
//search=Common.Common.string_Encrypt(search, "Dw9pVb9r");
where.Append(string.Format(" And OperTime<='{0}'", beginDate_2));
}
var list = _bll.GetModelList(0, 2000, where.ToString(), String.Format("{0} {1}", sortName, sortOrder));
var result = from p in list
select new
{
p.GID,
CecrietStr = new JavaScriptSerializer().Deserialize(Common.Common.string_Decrypt(p.CompanySecretKey, "Dw9pVb9r")),
p.OperUser,
p.OperTime
};
if (!(String.IsNullOrEmpty(search) || String.IsNullOrWhiteSpace(search)))
{
result = result.Where(p=>p.CecrietStr.Name.Contains(search));
}
if (!(String.IsNullOrEmpty(beginRegCount_1) || String.IsNullOrWhiteSpace(beginRegCount_1)))
{
result = result.Where(p => p.CecrietStr.Times>=Convert.ToInt32(beginRegCount_1));
}
if (!(String.IsNullOrEmpty(beginRegCount_2) || String.IsNullOrWhiteSpace(beginRegCount_2)))
{
result = result.Where(p => p.CecrietStr.Times <= Convert.ToInt32(beginRegCount_2));
}
if (!(String.IsNullOrEmpty(question) || String.IsNullOrWhiteSpace(question)))
{
result = result.Where(p => p.CecrietStr.ModHistory!=null&&p.CecrietStr.ModHistory.Contains(question));
}
var count = result.Count();//总数
result = result.Skip(startIndex).Take(limit);
return Json(new { total = count, rows = result });
}
///
/// 详细列表
///
///
public JsonResult GetDetailList(string parentId, string companyId, bool isroot)
{
StringBuilder where = new StringBuilder();
if (isroot)
where.Append("(PARENTID='0' or PARENTID='1') and TYPE<>1 ");
else
where.Append(string.Format("PARENTID='{0}'", parentId));
var list = _ibll.GetModelList(where.ToString());
var result = from p in list
select new
{
p.GID,
Name = p.DESCRIPTION,
Code = p.NAME,
Data = GetsecModel(p.GID, companyId),
p.PARENTID,
HasChild = _ibll.GetRecordCount(string.Format("PARENTID='{0}'", p.GID)) > 0
};
return Json(new { total = list.Count, rows = result });
}
public object GetsecModel(string gid, string companyid)
{
var model = _mbll.GetModelList("IdenSecretkey='" + Common.Common.string_Encrypt(gid, "2cP46Gox") + "' AND PID='" + companyid + "'").FirstOrDefault();
if (model != null)
return Json(new
{
SecModel = model,
SecrietStr = new JavaScriptSerializer().Deserialize(Common.Common.string_Decrypt(model.ModuleSecretkey, "2cP46Gox"))
}).Data;
return Json(new
{
SecModel = new sys_secModule(),
SecrietStr = new SecrietStr()
{
Id = null,
Name = null,
Times = null,
Enabled = null
}
}).Data;
}
///
/// 保存
///
///
///
public JsonResult Save(Model.sys_secCompany model)
{
bool result;
//加密算法{公司主键,公司名称,允许在线人数,是否启用}
CecrietStr smodel = new CecrietStr();
Regex reg = new Regex(@"(?<=Key:')[\w-]+(?=')");
smodel.Id = reg.Match(Request["Name"]).Value;
reg = new Regex(@"(?<=Value:').+(?=')");
smodel.Name = reg.Match(Request["Name"]).Value;
smodel.Times = Convert.ToInt32(Request["Times"]);
smodel.Enabled = Request["Enabled"] != "0";
smodel.MenuControl = Request["MenuControl"] != "0";
if (String.IsNullOrEmpty(model.GID))
{
var toEncrypt = new JavaScriptSerializer().Serialize(smodel);
var secretKey = Common.Common.string_Encrypt(toEncrypt, "Dw9pVb9r");
model.GID = Guid.NewGuid().ToString();
model.CompanySecretKey = secretKey;
model.OperUser = Session["SHOWNAME"].ToString();
model.OperTime = DateTime.Now;
result = _bll.Add(model) > 0;
} //新增
else
{
//获取原数据
var oldModel = _bll.GetModel(model.GID);
smodel.ModHistory = new JavaScriptSerializer().Deserialize(Common.Common.string_Decrypt(oldModel.CompanySecretKey, "Dw9pVb9r")).ModHistory;
var toEncrypt = new JavaScriptSerializer().Serialize(smodel);
var secretKey = Common.Common.string_Encrypt(toEncrypt, "Dw9pVb9r");
//类反射
Type type = typeof(Model.sys_secCompany);
PropertyInfo[] piArr = type.GetProperties();
foreach (var pi in piArr)
{
if (Array.IndexOf(Request.Params.AllKeys, pi.Name) < 0)
pi.SetValue(model, pi.GetValue(oldModel, null), null);
}
model.CompanySecretKey = secretKey;
model.OperUser = Session["SHOWNAME"].ToString();
model.OperTime = DateTime.Now;
result = _bll.Update(model) > 0;
//try
//{
// var operUser = Session["SHOWNAME"].ToString();
// var list = _ibll.GetModelList("MODTYPE=0");//获取配置下的模块
// foreach (var item in list)
// {
// SecrietStr pmodel = new SecrietStr();
// pmodel.Id = item.GID;
// pmodel.Name = item.DESCRIPTION;
// pmodel.Times = smodel.Times;
// pmodel.Enabled =true;
// toEncrypt = new JavaScriptSerializer().Serialize(pmodel);
// secretKey = Common.Common.string_Encrypt(toEncrypt, "2cP46Gox");
// sys_secModule detailmodel = new sys_secModule();
// detailmodel.GID = Guid.NewGuid().ToString();
// detailmodel.ModuleSecretkey = secretKey;
// detailmodel.OperUser = operUser;
// detailmodel.OperTime = DateTime.Now;
// detailmodel.IdenSecretkey = Common.Common.string_Encrypt(pmodel.Id, "2cP46Gox");
// detailmodel.PID = model.GID;
// var ymodel = _mbll.GetModelList("IdenSecretkey='" +
// Common.Common.string_Encrypt(pmodel.Id, "2cP46Gox") + "' AND PID='" +
// model.GID + "'").FirstOrDefault();
// if (ymodel != null)
// {
// detailmodel.GID = ymodel.GID;
// _mbll.Update(detailmodel);
// }
// else
// _mbll.Add(detailmodel);
// }
//}
//catch (Exception e)
//{
// result = false;
//}
} //修改
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
///
/// 保存从实例
///
///
///
public JsonResult SaveDetail(Model.sys_secModule model)
{
bool result;
//加密算法{模块主键,模块名称,允许使用人数,是否启用}
SecrietStr smodel = new SecrietStr();
smodel.Id = Request["SecId"];
smodel.Name = Request["Name"];
smodel.Times = Convert.ToInt32(Request["Times"]);
smodel.Enabled = Request["Enabled"] != "0";
var toEncrypt = new JavaScriptSerializer().Serialize(smodel);
var secretKey = Common.Common.string_Encrypt(toEncrypt, "2cP46Gox");
if (String.IsNullOrEmpty(model.GID))
{
model.GID = Guid.NewGuid().ToString();
model.ModuleSecretkey = secretKey;
model.OperUser = Session["SHOWNAME"].ToString();
model.OperTime = DateTime.Now;
model.IdenSecretkey = Common.Common.string_Encrypt(smodel.Id, "2cP46Gox");
result = _mbll.Add(model) > 0;
} //新增
else
{
//获取原数据
var oldModel = _mbll.GetModel(model.GID);
//类反射
Type type = typeof(Model.sys_secModule);
PropertyInfo[] piArr = type.GetProperties();
foreach (var pi in piArr)
{
if (Array.IndexOf(Request.Params.AllKeys, pi.Name) < 0)
pi.SetValue(model, pi.GetValue(oldModel, null), null);
}
model.ModuleSecretkey = secretKey;
model.IdenSecretkey = Common.Common.string_Encrypt(smodel.Id, "2cP46Gox");
model.OperUser = Session["SHOWNAME"].ToString();
model.OperTime = DateTime.Now;
result = _mbll.Update(model) > 0;
} //修改
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
///
/// 删除
///
///
///
public JsonResult Delete(string ids)
{
bool result = _bll.DeleteListWhere(string.Format("GID in({0})", ids)) > 0;
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
///
/// 删除
///
///
///
public JsonResult DeleteDetail(string ids)
{
bool result = _mbll.DeleteListWhere(string.Format("GID in({0})", ids)) > 0;
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
///
/// 懒加载公司信息
///
///
///
///
///
public JsonResult GetCompanyList(int pageIndex, int pageSize, string query)
{
StringBuilder where = new StringBuilder();
if (!String.IsNullOrEmpty(query))
where.Append(string.Format("SHORTNAME LIKE '%{0}%' OR CODENAME LIKE '%{0}%' OR DESCRIPTION LIKE '%{0}%'", query));
var list = _cbll.GetModelList(pageIndex, pageSize, where.ToString(), "SHORTNAME collate Chinese_PRC_CS_AS_KS_WS");
var total = _cbll.GetRecordCount(where.ToString());
var result = from p in list
select new
{
id = "{Key:'" + p.GID + "', Value:'" + p.SHORTNAME + "'}",
text = p.SHORTNAME
};
return Json(new { data = result, total }, JsonRequestBehavior.AllowGet);
}
///
/// 获取角色权限范围列表
///
///
public JsonResult GetAuthRangeList(string roleid, string sortOrder, string sortName, string search)
{
user_authority_infoBLL ibll = new user_authority_infoBLL();
StringBuilder where = new StringBuilder();
where.Append("ISDELETE=0");
if (!(String.IsNullOrEmpty(search) || String.IsNullOrWhiteSpace(search)))
where.Append(string.Format(" And DESCRIPTION like '%{0}%'", search));
var list = ibll.GetModelList(0,9999,where.ToString(), String.Format("{0} {1}", sortName, sortOrder));
//var list = ibll.GetModelList(string.Format(where + " ORDER BY {0} {1}", sortName, sortOrder));
var result = from p in list
select new
{
AUTHORITYID = p.GID,
NAME = p.DESCRIPTION,
VISIBLERANGE = 4,
OPERATERANGE = 4
};
if (!string.IsNullOrEmpty(roleid))
{
user_authority_rangeBLL rbll = new user_authority_rangeBLL();
var list1 = rbll.GetModelList("USERID='" + roleid + "'");
var update = from p in list1
select new
{
p.GID,
p.AUTHORITYID,
p.VISIBLERANGE,
p.OPERATERANGE,
VISIBLERELATION = GetRelation(p.VISIBLERANGE, p.AUTHORITYID, roleid,"vs"),
OPERATERELATION = GetRelation(p.OPERATERANGE, p.AUTHORITYID, roleid,"op")
};
return Json(new { result, update });
}
return Json(new { result, update = new ArrayList() });
}
private string GetRelation(int? type, string authority, string roleid,string rangtype)
{
var israngstr = " and OPERATERANGE=1 ";
if (rangtype =="vs") israngstr = " and VISIBLERANGE=1 ";
JavaScriptSerializer json = new JavaScriptSerializer();
user_authority_range_companyBLL rcbll = new user_authority_range_companyBLL();
user_authority_range_opBLL robll = new user_authority_range_opBLL();
var obj = new Object();
if (type == 5)
{
obj = from q in rcbll.GetModelList("USERID='" + roleid + "' AND AUTHORITYID='" + authority + "'"+ israngstr)
select new
{
id = q.COMPANYID,
name = "comp"
};
}
if (type == 6)
{
obj = from q in robll.GetModelList("USERID='" + roleid + "' AND AUTHORITYID='" + authority + "'"+ israngstr)
select new
{
id = q.OPID,
name = "user"
};
}
return json.Serialize(obj);
}
///
/// 获取角色下的权限
///
///
///
public JsonResult GetRoleModuleList(string pid)
{
sys_moduleBLL bll = new sys_moduleBLL();
StringBuilder where = new StringBuilder();
var list = bll.GetModelList("GID IN (SELECT AuthorityID FROM sys_roleauth WHERE PID='" + pid + "' AND TYPE=1)");
var result = from p in list
select new
{
id = p.GID,
name = p.DESCRIPTION,
pId = p.PARENTID
};
return Json(result);
}
///
/// 批量配置模块
///
///
///
///
///
public JsonResult SetMod(string companyid, int modtype, bool enabled)
{
var result = true;
try
{
var cmodel = _bll.GetModel(companyid);
CecrietStr cModel = new JavaScriptSerializer().Deserialize(
Common.Common.string_Decrypt(cmodel.CompanySecretKey, "Dw9pVb9r"));
var operUser = Session["SHOWNAME"].ToString();
var list = _ibll.GetModelList("MODTYPE=" + modtype);//获取配置下的模块
foreach (var item in list)
{
SecrietStr pmodel = new SecrietStr();
pmodel.Id = item.GID;
pmodel.Name = item.DESCRIPTION;
pmodel.Times = cModel.Times;
pmodel.Enabled = enabled;
var toEncrypt = new JavaScriptSerializer().Serialize(pmodel);
var secretKey = Common.Common.string_Encrypt(toEncrypt, "2cP46Gox");
sys_secModule model = new sys_secModule();
model.GID = Guid.NewGuid().ToString();
model.ModuleSecretkey = secretKey;
model.OperUser = operUser;
model.OperTime = DateTime.Now;
model.IdenSecretkey = Common.Common.string_Encrypt(pmodel.Id, "2cP46Gox");
model.PID = companyid;
var ymodel = _mbll.GetModelList("IdenSecretkey='" +
Common.Common.string_Encrypt(pmodel.Id, "2cP46Gox") + "' AND PID='" +
companyid + "'").FirstOrDefault();
if (ymodel != null)
{
model.GID = ymodel.GID;
_mbll.Update(model);
}
else
_mbll.Add(model);
}
//设置模块历史
var hisList = cModel.ModHistory;
List modHis = new List();
if (!string.IsNullOrEmpty(hisList))
modHis = hisList.Split(',').ToList();
if (enabled)
{
if (!modHis.Contains(modtype.ToString()))
modHis.Add(modtype.ToString());
}
else
modHis.Remove(modtype.ToString());
cModel.ModHistory = modHis.Count > 0 ? string.Join(",", modHis) : "";
var cecretKey = new JavaScriptSerializer().Serialize(cModel);
cmodel.CompanySecretKey = Common.Common.string_Encrypt(cecretKey, "Dw9pVb9r");
_bll.Update(cmodel);
}
catch (Exception e)
{
result = false;
}
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
///
/// 获取导出sql
///
///
///
public JsonResult GetSql(string ids)
{
var list = _bll.GetModelList(string.Format("GID in({0})", ids));
return Json(list);
}
///
/// 懒加载权限信息
///
///
///
///
///
public JsonResult GetAuthList(int pageIndex, int pageSize, string query)
{
sys_moduleBLL ibll = new sys_moduleBLL();
StringBuilder where = new StringBuilder();
if (!String.IsNullOrEmpty(query))
where.Append(string.Format("NAME LIKE '%{0}%' OR DESCRIPTION LIKE '%{0}%'", query));
var list = ibll.GetModelList(pageIndex, pageSize, where.ToString(), "DESCRIPTION collate Chinese_PRC_CS_AS_KS_WS");
var total = ibll.GetRecordCount(where.ToString());
var result = from p in list
select new
{
id = p.GID,
text = p.DESCRIPTION
};
return Json(new { data = result, total }, JsonRequestBehavior.AllowGet);
}
///
/// 获取角色列表
///
///
///
///
///
///
///
public JsonResult GetRoleList(int startIndex, int limit, string search, string sortName, string sortOrder)
{
sys_roleauthBLL mbll = new sys_roleauthBLL();
StringBuilder where = new StringBuilder();
where.Append("Type=0");
if (!(String.IsNullOrEmpty(search) || String.IsNullOrWhiteSpace(search)))
where.Append(string.Format(" And Name like '%{0}%'", search));
var list = mbll.GetModelList(startIndex, limit, where.ToString(), String.Format("{0} {1}", sortName, sortOrder));
var count = mbll.GetRecordCount(where.ToString());//总数
return Json(new { total = count, rows = list });
}
///
/// 保存角色
///
///
///
public JsonResult SaveRole(sys_roleauth model)
{
bool result;
sys_roleauthBLL mbll = new sys_roleauthBLL();
if (String.IsNullOrEmpty(model.GID))
{
model.GID = Guid.NewGuid().ToString();
result = mbll.Add(model) > 0;
} //新增
else
{
//获取原数据
var oldModel = mbll.GetModel(model.GID);
//类反射
Type type = typeof(Model.sys_roleauth);
PropertyInfo[] piArr = type.GetProperties();
foreach (var pi in piArr)
{
if (Array.IndexOf(Request.Params.AllKeys, pi.Name) < 0)
pi.SetValue(model, pi.GetValue(oldModel, null), null);
}
result = mbll.Update(model) > 0;
} //修改
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
///
/// 删除角色
///
///
///
public JsonResult RoleAuthDelete(string ids)
{
sys_roleauthBLL mbll = new sys_roleauthBLL();
user_authority_rangeBLL rbll = new user_authority_rangeBLL();
user_authority_range_companyBLL rcbll = new user_authority_range_companyBLL();
user_authority_range_opBLL robll = new user_authority_range_opBLL();
bool result = mbll.DeleteListWhere(string.Format("GID in({0})", ids)) > 0;
user_roleBLL ubll = new user_roleBLL();
//删除关系表数据
bool result1 = ubll.DeleteListWhere(string.Format("ROLEID in({0})", ids)) > 0;
//删除权限范围角色权限关系数据
bool result2 = rbll.DeleteListWhere(string.Format("USERID in({0})", ids)) > 0;
//删除公司关联表数据
bool result3 = rcbll.DeleteListWhere(string.Format("USERID in({0})", ids)) > 0;
//删除人员关联表数据
bool result4 = robll.DeleteListWhere(string.Format("USERID in({0})", ids)) > 0;
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
///
/// 复制新建角色
///
///
///
///
public JsonResult CopyRole(sys_roleauth model)
{
sys_roleauthBLL mbll = new sys_roleauthBLL();
user_authority_rangeBLL rbll = new user_authority_rangeBLL();
user_authority_range_companyBLL rcbll = new user_authority_range_companyBLL();
user_authority_range_opBLL robll = new user_authority_range_opBLL();
bool result = false;
var role = mbll.GetModel(model.GID); ;
role.GID = Guid.NewGuid().ToString();
role.Name = model.Name;
//return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
//复制新增一条角色信息
result=mbll.Add(role)>0;
var oldroleid = model.GID;
if (result)
{
var rolelist = mbll.GetModelList(string.Format("PID= '{0}' ", oldroleid));
foreach (var item in rolelist)
{
item.GID = Guid.NewGuid().ToString();
item.PID = role.GID;
result = mbll.Add(item) > 0;
if (!result) break;
}
}
if (result)
{
//复制增加 权限范围角色权限关系数据
var authority_rangelist = rbll.GetModelList(string.Format("USERID in('{0}')", oldroleid));
foreach (var item in authority_rangelist)
{
item.GID = Guid.NewGuid().ToString();
item.USERID = role.GID;
result=rbll.Add(item)> 0;
if (!result) break;
}
}
//公司关联表数据
if (result)
{
var user_authority_range_companylist = rcbll.GetModelList(string.Format("USERID in('{0}')", oldroleid));
foreach (var item in user_authority_range_companylist)
{
item.GID = Guid.NewGuid().ToString();
item.USERID = role.GID;
result = rcbll.Add(item)>0;
if (!result) break;
}
}
//人员关联表数据
if (result)
{
var user_authority_range_oplist = robll.GetModelList(string.Format("USERID in('{0}')", oldroleid));
foreach (var item in user_authority_range_oplist)
{
item.GID = Guid.NewGuid().ToString();
item.USERID = role.GID;
result = robll.Add(item)>0;
if (!result) break;
}
}
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
///
/// 删除权限
///
///
///
public JsonResult RoleAuthDelete2(string roleid, string ids)
{
var module = new Modules.ModuleGridSource();
user_roleBLL ubll = new user_roleBLL();
sys_roleauthBLL mbll = new sys_roleauthBLL();
bool result = mbll.DeleteListWhere(string.Format("PID ='{0}' AND AuthorityID IN({1})", roleid, ids)) > 0;
//所有拥有此角色的人员删除该权限
var list = ubll.GetModelList("ROLEID='" + roleid + "'");
string[] delItems = ids.Split(',');
foreach (var item in delItems)
{
foreach (var p in list)
module.RemoveUserModule(p.USERID, item.Replace("\'", ""));
}
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
///
/// 获取人员树型
///
///
public JsonResult GetUsertreeView()
{
StringBuilder userBuilder = new StringBuilder();
IList companyEntities = new List();
CompanyDA companyDA = new CompanyDA();
companyEntities = companyDA.GetAllCompany();
if (companyEntities.Count > 0)
{
userBuilder.Append("[");
for (int k = 0; k < companyEntities.Count; k++)
{
if (k == 0)
{
userBuilder.Append("{id:\"" + companyEntities[k].GID + "\",");
}
else
{
userBuilder.Append(",{id:\"" + companyEntities[k].GID + "\",");
}
userBuilder.Append("name:\"" + companyEntities[k].NAME + "\",nocheck:false");
IList sysDeptEntities = new List();
sysDeptEntities = new SysDeptDA().GetDepartmentByCompanyID(companyEntities[k].GID);
if (sysDeptEntities.Count > 0)
{
userBuilder.Append(",childred:[");
for (int j = 0; j < sysDeptEntities.Count; j++)
{
userBuilder.Append("{id:\"" + sysDeptEntities[j].GID + "\",");
userBuilder.Append("name:\"" + sysDeptEntities[j].DEPTNAME + "\",nocheck:false");
IList userEntities = new List();
userEntities = new UserDA().GetUserByCompanyAndDept(companyEntities[k].GID, sysDeptEntities[j].DEPTNAME);
if (userEntities.Count > 0)
{
userBuilder.Append(",childred:[");
for (int i = 0; i < userEntities.Count; i++)
{
userBuilder.Append("{id:\"" + userEntities[i].Gid + "\",");
userBuilder.Append("name:\"" + userEntities[i].ShowName + "\"");
if (i == userEntities.Count - 1)
{
userBuilder.Append("}");
}
else
{
userBuilder.Append("},");
}
}
userBuilder.Append("]");
}
if (j == sysDeptEntities.Count - 1)
{
userBuilder.Append("}");
}
else
{
userBuilder.Append("},");
}
}
userBuilder.Append("]");
}
userBuilder.Append("}");
}
userBuilder.Append("]");
}
return Json(userBuilder.ToString());
}
///
/// 设置角色
///
///
///
///
///
public JsonResult SetRole(string userid, string roleid, int type)
{
sys_roleauthBLL mbll = new sys_roleauthBLL();
var authlist = mbll.GetModelList("Type=1 And PID ='" + roleid + "'");
var module = new Modules.ModuleGridSource();
string msg = "";
try
{
foreach (var item in authlist)
{
if (type == 0)
{
var m = module.RemoveUserModule(userid, item.AuthorityID);
if (m != "1") msg += m + "
";
}
else
{
var m = module.AddUserModule(userid, item.AuthorityID);
if (m != "1") msg += m + "
";
}
}
//绑定用户角色表
//dosomething
return Json(msg);
}
catch (Exception se)
{
return Json(se.Message);
}
}
///
/// 设置权限范围
///
///
///
///
///
///
///
///
///
public void SetRange(string userid, string roleid, int type)
{
sys_roleauthBLL mbll = new sys_roleauthBLL();
user_authority_rangeBLL arbll = new user_authority_rangeBLL();
user_authority_range_companyBLL rcbll = new user_authority_range_companyBLL();
user_authority_range_opBLL robll = new user_authority_range_opBLL();
arbll.DeleteListWhere("USERID='" + userid + "' ");
//删除之前的配置(公司)
rcbll.DeleteListWhere("USERID='" + userid + "' ");
//删除之前的配置(人员)
robll.DeleteListWhere("USERID='" + userid + "' ");
user_roleBLL ubll = new user_roleBLL();
var listrole = ubll.GetModelList("USERID='" + userid + "'");
foreach (var role in listrole)
{
var list = arbll.GetModelList("USERID='" + role.ROLEID + "'");
foreach (var item in list)
{
SetAuthRange(userid, item.AUTHORITYID, item.VISIBLERANGE, item.OPERATERANGE, role.ROLEID);
}
}
//if (type == 0) //移除角色
//{
// //删除权限范围 type=0
// arbll.DeleteListWhere("USERID='" + userid + "' AND AUTHORITYID in (SELECT AUTHORITYID FROM user_authority_range WHERE USERID='" + roleid + "')");
// //删除之前的配置(公司)
// rcbll.DeleteListWhere("USERID='" + userid + "' AND AUTHORITYID in (SELECT AUTHORITYID FROM user_authority_range WHERE USERID='" + roleid + "')");
// //删除之前的配置(人员)
// robll.DeleteListWhere("USERID='" + userid + "' AND AUTHORITYID in (SELECT AUTHORITYID FROM user_authority_range WHERE USERID='" + roleid + "')");
// user_roleBLL ubll = new user_roleBLL();
// var listrole = ubll.GetModelList("USERID='" + userid + "'");
// foreach (var role in listrole)
// {
// var list = arbll.GetModelList("USERID='" + role.ROLEID + "'");
// foreach (var item in list)
// {
// SetAuthRange(userid, item.AUTHORITYID, item.VISIBLERANGE, item.OPERATERANGE, roleid);
// }
// }
//}
//if (type == 1)//添加角色
//{
// //增加权限范围
// var list = arbll.GetModelList("USERID='" + roleid + "'");
// foreach (var item in list)
// {
// SetAuthRange(userid, item.AUTHORITYID, item.VISIBLERANGE, item.OPERATERANGE, roleid);
// }
//}
}
///
/// 设置单独权限的范围
///
private void SetAuthRange(string userid, string authority, int? view, int? opera, string roleid)
{
user_authority_rangeBLL arbll = new user_authority_rangeBLL();
var model = arbll.GetModelList("USERID='" + userid + "' AND AUTHORITYID='" + authority + "'").FirstOrDefault();
if (model != null)
{
if (model.VISIBLERANGE == 5 || view == 5)
model.VISIBLERANGE = 5;
else if (model.VISIBLERANGE == 6 || view == 6)
model.VISIBLERANGE = 6;
else if (model.VISIBLERANGE >= view)
model.VISIBLERANGE = view;
if (model.OPERATERANGE == 5 || opera == 5)
model.OPERATERANGE = 5;
else if (model.OPERATERANGE == 6 || opera == 6)
model.OPERATERANGE = 6;
else if (model.OPERATERANGE >= opera)
model.OPERATERANGE = opera;
model.MODIFIEDTIME = DateTime.Now;
model.MODIFIEDUSER = Session["USERID"].ToString();
arbll.Update(model);
}
else
{
model = new user_authority_range();
model.GID = Guid.NewGuid().ToString();
model.USERID = userid;
model.AUTHORITYID = authority;
model.VISIBLERANGE = view;
model.OPERATERANGE = opera;
model.CREATEUSER = Session["USERID"].ToString();
model.CREATETIME = DateTime.Now;
arbll.Add(model);
}
var data_view = GetRelation(model.VISIBLERANGE, model.AUTHORITYID, roleid,"vs");
var data_opera = GetRelation(model.OPERATERANGE, model.AUTHORITYID, roleid,"op");
SetCompUser(model.VISIBLERANGE, model.OPERATERANGE, model.AUTHORITYID, model.USERID, data_view, data_opera);
}
public void SetCompanyRange(string authorityid, string userid, int type, string list)
{
//var israngstr = " and OPERATERANGE=1 ";
//if (type == 0) israngstr = " and VISIBLERANGE=1 ";
user_authority_range_companyBLL rcbll = new user_authority_range_companyBLL();
var plist = new JavaScriptSerializer().Deserialize>(list);
foreach (var p in plist)
{
var umodel = rcbll.GetModelList("USERID='" + userid + "' AND AUTHORITYID='" + authorityid + "' AND COMPANYID='" + p.id + "'").FirstOrDefault();
if (umodel != null)
{
if (type == 0)
umodel.VISIBLERANGE = 1;
else
umodel.OPERATERANGE = 1;
umodel.MODIFIEDTIME = DateTime.Now;
umodel.MODIFIEDUSER = Session["USERID"].ToString();
rcbll.Update(umodel);
}
else
{
umodel = new user_authority_range_company();
umodel.GID = Guid.NewGuid().ToString();
umodel.USERID = userid;
umodel.AUTHORITYID = authorityid;
umodel.COMPANYID = p.id;
if (type == 0)
{
umodel.VISIBLERANGE = 1;
umodel.OPERATERANGE = 0;
}
else
{
umodel.VISIBLERANGE = 0;
umodel.OPERATERANGE = 1;
}
umodel.CREATETIME = DateTime.Now;
umodel.CREATEUSER = Session["USERID"].ToString();
rcbll.Add(umodel);
}
}
}
///
/// 保存角色权限配置
///
/// type:0 - 角色权限 1:角色权限范围
///
public void SetUserRange(string authorityid, string userid, int type, string list)
{
//var sqlstr = " update user_authority_range_op set OPERATERANGE=0 where USERID = '" + userid + "' AND AUTHORITYID = '" + authorityid + "'";
//if (type == 0) sqlstr = " update user_authority_range_op set VISIBLERANGE=0 where USERID = '" + userid + "' AND AUTHORITYID = '" + authorityid + "'";
//var _r = BasicDataRefDAL.ExecSql(sqlstr);
user_authority_range_opBLL robll = new user_authority_range_opBLL();
var omodellist = robll.GetModelList("USERID='" + userid + "' AND AUTHORITYID='" + authorityid + "'");
var qlist = new JavaScriptSerializer().Deserialize>(list);
foreach (var p in qlist)
{
var omodel = omodellist.Find(t => t.OPID == p.id);
if (omodel != null)
{
if (type == 0)
omodel.VISIBLERANGE = 1;
else
omodel.OPERATERANGE = 1;
omodel.MODIFIEDTIME = DateTime.Now;
omodel.MODIFIEDUSER = Session["USERID"].ToString();
robll.Update(omodel);
}
else
{
omodel = new user_authority_range_op();
omodel.GID = Guid.NewGuid().ToString();
omodel.USERID = userid;
omodel.AUTHORITYID = authorityid;
omodel.OPID = p.id;
if (type == 0)
{
omodel.VISIBLERANGE = 1;
omodel.OPERATERANGE = 0;
}
else
{
omodel.VISIBLERANGE = 0;
omodel.OPERATERANGE = 1;
}
omodel.CREATETIME = DateTime.Now;
omodel.CREATEUSER = Session["USERID"].ToString();
robll.Add(omodel);
}
}
}
///
/// 角色添加权限
///
///
///
///
public JsonResult SaveRoleAuth(string roleid, string modulelist)
{
var module = new Modules.ModuleGridSource();
sys_roleauthBLL mbll = new sys_roleauthBLL();
user_roleBLL ubll = new user_roleBLL();
try
{
var data = new JavaScriptSerializer().Deserialize>(modulelist);
var list = ubll.GetModelList("ROLEID='" + roleid + "'");
//20200225 首先检查拥有该角色的所有人 能否获得该权限范围
var useridlist = "";
foreach (var user in list) {
if (useridlist != "") useridlist += ",";
useridlist += user.GID;
}
var checkresult = SysUserDAL.CheckOPRange(data, useridlist);
if (!checkresult.Success) {
return Json(new { success = false, msg = checkresult.Message });
}
foreach (var item in data)
{
sys_roleauth model = new sys_roleauth();
model.GID = Guid.NewGuid().ToString();
model.AuthorityID = item.id;//模块id
model.Name = item.name;
model.PID = roleid;
model.Type = 1;//一般权限
mbll.Add(model);
//所有拥有此角色的人员添加该权限
foreach (var p in list)
module.AddUserModule(p.USERID, item.id);
}
return Json(new { success = true });
}
catch (Exception se)
{
return Json(new { success = false, msg = se.Message });
}
}
//获取全部角色
public JsonResult GetRoleView()
{
sys_roleauthBLL mbll = new sys_roleauthBLL();
StringBuilder where = new StringBuilder();
where.Append("Type=0");
var list = mbll.GetModelList(where.ToString());
var result = from p in list
select new
{
id = p.GID,
name = p.Name
};
return Json(result);
}
///
/// 获取人员对应的角色
///
///
///
public JsonResult GetUserRoleChecked(string userid)
{
sys_roleauthBLL mbll = new sys_roleauthBLL();
StringBuilder where = new StringBuilder();
where.Append(string.Format("Type=0 and GID in (SELECT ROLEID FROM USER_ROLE WHERE USERID ='{0}')", userid));
var list = mbll.GetModelList(where.ToString());
var result = from p in list
select new
{
id = p.GID,
name = p.Name
};
return Json(result);
}
///
/// 保存用户角色
///
///
///
///
public JsonResult SaveUserRole(string userid, string rolelist, int type)
{
user_roleBLL ubll = new user_roleBLL();
try
{
var data = new JavaScriptSerializer().Deserialize>(rolelist);
foreach (var item in data)
{
user_role model = new user_role();
model.GID = Guid.NewGuid().ToString();
model.ROLEID = item.id;
model.USERID = userid;
switch (type)
{
case 1://添加角色
ubll.Add(model);
//加权限
SetRole(userid, item.id, 1);
////修改权限范围
//SetRange(userid, item.id, 1);
break;
case 0://移除角色
ubll.DeleteListWhere(string.Format("USERID='{0}' AND ROLEID='{1}'", userid, item.id));
////移除权限
SetRole(userid, item.id, 0);
////恢复默认权限范围
//SetRange(userid, item.id, 0);
break;
}
}
SetRange(userid,"", 1);
return Json(new { success = true });
}
catch (Exception se)
{
return Json(new { success = false, msg = se.Message });
}
}
///
/// 获取公司列表
///
///
public JsonResult GetCompanyList1()
{
companyBLL cbll = new companyBLL();
var result = from p in cbll.GetModelList("")
select new
{
id = p.GID,
name = p.NAME
};
return Json(result);
}
///
/// 保存权限范围
///
///
public JsonResult SaveAuthByRole(user_authority_range model)
{
user_authority_rangeBLL rbll = new user_authority_rangeBLL();
bool result;
if (String.IsNullOrEmpty(model.GID))
{
model.GID = Guid.NewGuid().ToString();
model.CREATEUSER = Session["SHOWNAME"].ToString();
model.CREATETIME = DateTime.Now;
result = rbll.Add(model) > 0;
} //新增
else
{
//获取原数据
var oldModel = rbll.GetModel(model.GID);
//类反射
Type type = typeof(Model.user_authority_range);
PropertyInfo[] piArr = type.GetProperties();
foreach (var pi in piArr)
{
if (Array.IndexOf(Request.Params.AllKeys, pi.Name) < 0)
pi.SetValue(model, pi.GetValue(oldModel, null), null);
}
model.MODIFIEDUSER = Session["SHOWNAME"].ToString();
model.MODIFIEDTIME = DateTime.Now;
result = rbll.Update(model) > 0;
} //修改
//设置角色对应的权限范围
var data_view = Request["VISIBLERELATION"];
var data_opera = Request["OPERATERELATION"];
SetCompUser(model.VISIBLERANGE, model.OPERATERANGE, model.AUTHORITYID, model.USERID, data_view, data_opera);
//获取该角色下的人员并修改权限范围
user_roleBLL bll = new user_roleBLL();
var list = bll.GetModelList("ROLEID='" + model.USERID + "'");
foreach (var item in list)
SetAuthRange(item.USERID, model.AUTHORITYID, model.VISIBLERANGE, model.OPERATERANGE, model.USERID);
return Json(new { success = result, message = result ? "操作成功" : "操作失败" });
}
private void SetCompUser(int? view, int? opera, string authority, string userid, string data_view, string data_opera)
{
//可视范围(保存人员)
if (view == 5)
SetCompanyRange(authority, userid, 0, data_view);
if (view == 6)
SetUserRange(authority, userid, 0, data_view);
//操作范围(保存人员)
if (opera == 5)
SetCompanyRange(authority, userid, 1, data_opera);
if (opera == 6)
SetUserRange(authority, userid, 1, data_opera);
}
///
/// 保存权限范围
///
///
public JsonResult SaveAuthByRoleMulti(string jsonStr)
{
var jsonObj = JsonConvert.DeserializeObject>(jsonStr);
user_authority_rangeBLL rbll = new user_authority_rangeBLL();
bool result;
foreach (var model in jsonObj)
{
if (String.IsNullOrEmpty(model.GID))
{
model.GID = Guid.NewGuid().ToString();
model.CREATEUSER = Session["SHOWNAME"].ToString();
model.CREATETIME = DateTime.Now;
result = rbll.Add(model) > 0;
} //新增
else
{
//获取原数据
var oldModel = rbll.GetModel(model.GID);
////类反射
//Type type = typeof(Model.user_authority_range);
//PropertyInfo[] piArr = type.GetProperties();
//foreach (var pi in piArr)
//{
// if (Array.IndexOf(Request.Params.AllKeys, pi.Name) < 0)
// pi.SetValue(model, pi.GetValue(oldModel, null), null);
//}
model.CREATETIME = oldModel.CREATETIME;
model.CREATEUSER = oldModel.CREATEUSER;
model.MODIFIEDUSER = Session["SHOWNAME"].ToString();
model.MODIFIEDTIME = DateTime.Now;
result = rbll.Update(model) > 0;
} //修改
//设置角色对应的权限范围
var data_view = model.VISIBLERELATION;
var data_opera = model.OPERATERELATION;
SetCompUser(model.VISIBLERANGE, model.OPERATERANGE, model.AUTHORITYID, model.USERID, data_view, data_opera);
//获取该角色下的人员并修改权限范围
user_roleBLL bll = new user_roleBLL();
var list = bll.GetModelList("ROLEID='" + model.USERID + "'");
foreach (var item in list)
SetAuthRange(item.USERID, model.AUTHORITYID, model.VISIBLERANGE, model.OPERATERANGE, model.USERID);
}
return Json(new { success = true, message = "操作成功" });
}
#endregion
public bool SetRoleAuthRange()
{
var result = true;
return result;
}
public ContentResult CopyAuth(string FromUSERID, string ToUSERIDLIST)
{
DBResult result = new DBResult();
if (string.IsNullOrWhiteSpace(FromUSERID) || string.IsNullOrWhiteSpace(ToUSERIDLIST))
{
var jsonRespose1 = new MvcShipping.Helper.JsonResponse
{
Success = false,
Message = "请正确选择权限来源用户和目标用户",
Data = ""
};
return new ContentResult() { Content = MvcShipping.Helper.JsonConvert.Serialize(jsonRespose1) };
}
var useridlist = ToUSERIDLIST.Split(',');
//20200221 首先获取来源用户的所有模块ID列表
var useractionbll = new user_actionBLL();
var useractionlist = useractionbll.GetModelList(" userid='"+ FromUSERID + "' and exists(select 1 from [action] where gid=ACTIONID)");
var checkcando = new DBResult(true, "", null);
//逐个权限进行判断 看这次能否添加得上
foreach (var module in useractionlist) {
checkcando = SysUserDAL.CheckOPRangeByActionID(module.ACTIONID, ToUSERIDLIST);
if (!checkcando.Success) {
result.SetErrorInfo(checkcando.Message);
}
}
//如不能 则返回所有引起错误的信息
if (!string.IsNullOrWhiteSpace(result.Message) && !result.Success) {
var jsonRespose1 = new MvcShipping.Helper.JsonResponse
{
Success = false,
Message = result.Message,
Data = ""
};
return new ContentResult() { Content = MvcShipping.Helper.JsonConvert.Serialize(jsonRespose1) };
}
//对权限进行设置
StringBuilder sqlstrbase = new StringBuilder();
sqlstrbase.Append("declare @USERID varchar(50) ");
sqlstrbase.Append("declare @CREATEUSER varchar(50) ");
sqlstrbase.Append("declare @FROMUSER varchar(50) ");
sqlstrbase.Append("set @USERID='{0}' ");
sqlstrbase.Append("set @CREATEUSER='{1}' ");
sqlstrbase.Append("set @FROMUSER = '{2}' ");
sqlstrbase.Append("delete from user_action where USERID=@USERID ");
sqlstrbase.Append("insert into user_action (GID,ACTIONID,USERID,CREATEUSER,CREATETIME,MODIFIEDUSER,MODIFIEDTIME) ");
sqlstrbase.Append("select newid(),actionid,@USERID,@CREATEUSER,getdate(),@CREATEUSER,getdate() from user_action where userid = @FROMUSER ");
sqlstrbase.Append("delete from user_authority_range where USERID=@USERID ");
sqlstrbase.Append("insert into user_authority_range (GID,USERID,AUTHORITYID,VISIBLERANGE,OPERATERANGE,CREATEUSER,CREATETIME,MODIFIEDUSER,MODIFIEDTIME) ");
sqlstrbase.Append("select newid(),@USERID,AUTHORITYID,VISIBLERANGE,OPERATERANGE,@CREATEUSER,getdate(),@CREATEUSER,getdate() from user_authority_range where userid = @FROMUSER ");
sqlstrbase.Append("delete from user_authority_range_op where USERID=@USERID ");
sqlstrbase.Append("insert into user_authority_range_op (GID,USERID,AUTHORITYID,OPID,OPNAME,VISIBLERANGE,OPERATERANGE,CREATEUSER,CREATETIME,MODIFIEDUSER,MODIFIEDTIME) ");
sqlstrbase.Append("select newid(),@USERID,AUTHORITYID,OPID,OPNAME,VISIBLERANGE,OPERATERANGE,@CREATEUSER,getdate(),@CREATEUSER,getdate() from user_authority_range_op where userid = @FROMUSER ");
sqlstrbase.Append("delete from user_authority_range_company where USERID=@USERID ");
sqlstrbase.Append("insert into user_authority_range_company (GID,USERID,AUTHORITYID,COMPANYID,VISIBLERANGE,OPERATERANGE,CREATEUSER,CREATETIME,MODIFIEDUSER,MODIFIEDTIME) ");
sqlstrbase.Append("select newid(),@USERID,AUTHORITYID,COMPANYID,VISIBLERANGE,OPERATERANGE,@CREATEUSER,getdate(),@CREATEUSER,getdate() from user_authority_range_company where userid = @FROMUSER ");
foreach (var userid in useridlist) {
string sqlstr = string.Format(sqlstrbase.ToString(), userid,Session["USERID"].ToString(), FromUSERID);
var _r = BasicDataRefDAL.ExecSql(sqlstr);
if (_r == -1) {
var jsonRespose2 = new MvcShipping.Helper.JsonResponse
{
Success = true,
Message = "设置错误,请联系管理员!",
Data = ""
};
return new ContentResult() { Content = MvcShipping.Helper.JsonConvert.Serialize(jsonRespose2) };
}
}
var jsonRespose = new MvcShipping.Helper.JsonResponse
{
Success = true,
Message = "设置完成",
Data = ""
};
return new ContentResult() { Content = MvcShipping.Helper.JsonConvert.Serialize(jsonRespose) };
}
}
public class modeuleClass
{
public string id { get; set; }
public string name { get; set; }
}
}