Dev 简易权限管理
目标:对DEV的RibbonControl进行简易的权限
因为是简易版所以不涉及角色管理,数据库只建立user和function两个表,结构简单紧做参考。
user表
用户的权限信息以字符串存储在functionlist字段里。(格式为:“functionId;functionId”)
function表
存储RibbonControl,functionId控件ID,pId控件父级ID,functionName存储控件名称,annotation存储显示文本。
定义用户权限窗口
说明:权限treeview会列出展示的所以权限,管理员勾选选择开通。
用户权限获取逻辑代码
internal List<String> CurrentUserFunctions()
{
List<string> result = new List<string>();
using (JTDataClassesDataContext db = new JTDataClassesDataContext())
{
if (DataTableInMemory.datas.CurrentUser.functionlist == null) return null;
string[] functions = DataTableInMemory.datas.CurrentUser.functionlist.Split(';');
CheckFuncitons(ref functions);
var q = from c in db.ZJ_T_FUNCTION
where functions.ToList().Contains(c.functionId.ToString())
select c;
q.ToList().ForEach(p => result.Add(p.functionName));
return result;
}
}
/// <summary>
/// 因为权限定义规则是abc三级,c级显示是,上两级也要显示
/// 以后跟扩展为aabbcc三级
/// </summary>
/// <param name="functions"></param>
private void CheckFuncitons(ref string[] functions)
{
List<string> tempFunctions = new List<string>();
foreach (string item in functions)
{
if (!tempFunctions.Contains(item))
{
tempFunctions.Add(item);
if (Convert.ToInt32(item) % 10 != 0)
{
string p1 = item.Substring(0, 2) + "0";
if (!tempFunctions.Contains(p1))
{
tempFunctions.Add(p1);
}
string p2 = item.Substring(0, 1) + "00";
if (!tempFunctions.Contains(p2))
{
tempFunctions.Add(p2);
}
}
}
}
functions = tempFunctions.ToArray();
}
主窗口中调用显示
private void SetCurrentUserFunctions()
{
if (DataTableInMemory.datas.IsAdmin)
{//该功能仅仅为管理员提供
ribbonPageGroup4.Visible = true;
barHeaderItemUserName.Caption = DataTableInMemory.datas.AdminUser.userName;
return;
}
barHeaderItemUserName.Caption = DataTableInMemory.datas.CurrentUser.userName;
List<string> toolsVisibleData = new List<string>();
toolsVisibleData = new dao.FunctionsDao().CurrentUserFunctions();
foreach (RibbonPage rpPage in this.ribbonControl1.Pages)
{
rpPage.Visible = toolsVisibleData.Contains(rpPage.Name) ? true : false;
if (rpPage.Visible)
{
foreach (RibbonPageGroup rpgPageGroup in rpPage.Groups)
{
rpgPageGroup.Visible = toolsVisibleData.Contains(rpgPageGroup.Name) ? true : false;
if (rpgPageGroup.Visible)
{
foreach (BarItemLink bbilLink in rpgPageGroup.ItemLinks)
{
bbilLink.Visible = toolsVisibleData.Contains(bbilLink.Item.Name) ? true : false;
}
}
}
}
}
}