对权限的控制,控制到页面的按钮(DNN)
下面为对DNN权限的控制扩展。用于控制到页面上的控件。注意:“保密”的中文替换了原来的重要信息。
此段代码很简单,希望能帮助到大家。也希望大家多多提建议。
--------------------编程问答-------------------- 沙发
/// <summary>
/// Gets all the permission id for the user in the current module.
/// </summary>
/// <returns>a <list type="ModulePermissionInfo" /> represents all the permissions for the
/// current signed in user in the specific module.</returns>
/// <remarks>
/// If the current signed in user is dnn host.
/// </remarks>
protected List<int> GetModulePermissionIdList()
{
List<int> modulePermissionIdList = new List<int>();
if (!DotNetNuke.Entities.Users.UserController.GetCurrentUserInfo().IsSuperUser)
{
// Retrieve all permissionInfo for current module(module -> role ->permissionInfo)
ModulePermissionCollection modulePermissionCollection = this.ModuleContext.Configuration.ModulePermissions;
string[] userRoleNameArray = DotNetNuke.Entities.Users.UserController.GetCurrentUserInfo().Roles;
IList<int> userRoleIdList = new List<int>();
//Get role Id list for current signed in user.
foreach (string roleName in userRoleNameArray)
{
int roleId = DotNetNuke.Security.Roles.RoleProvider.Instance().GetRole(this.ModuleContext.PortalId, roleName).RoleID;
modulePermissionIdList.AddRange(modulePermissionCollection.Where(x => (x.RoleID == roleId) && (x.AllowAccess == true)).Select(y => y.ModulePermissionID));
}
}
return modulePermissionIdList;
}
/// <summary>
/// Set the style for a particular control
/// </summary>
/// <param name="modulePermissionId">Dnn's modulepermission table's primary key</param>
protected void SetControlAttribute()
{
string defaultStyle = "Null";
string decollator = "-";
string sum = "+";
string dollarShape = "$";
string style = "style";
string serverStyles = string.Empty;
string stringDisabled="disabled";
//保存服务端所有控件ID集合
ArrayList arrayListServerIds = new ArrayList();
//保存服务端控件的样式集合
ArrayList arrayListServerStyles = new ArrayList();
//保存客户端控件ID字典
Dictionary<string, string> dictionaryClients = new Dictionary<string, string>();
IList<System.Web.UI.WebControls.WebControl> contorlList = new List<System.Web.UI.WebControls.WebControl>();
IList<保密.DSS.PersistentModel.PermissionControlMapping> permissionControlMappingList = null;
保密.DSS.DataAccess.IDataProviderFactory factory = new 保密.DSS.DataAccess.DataProviderFacotry();
保密.DSS.DataAccess.IGenericDataProvider genericDataProvider = factory.CreateDataProvider<保密.DSS.DataAccess.IGenericDataProvider>();
保密.DSS.DataAccess.IPermissionControlMappingDataProvider permissionControlMappingDataProvider = factory.CreateDataProvider<保密.DSS.DataAccess.IPermissionControlMappingDataProvider>();
List<int> modulePermissionIdList = GetModulePermissionIdList();
if (modulePermissionIdList != null && modulePermissionIdList.Count > 0)
{
foreach (System.Web.UI.Control control in this.Page.Controls)
{
GetControls(control, contorlList, arrayListServerIds);
}
if (contorlList == null || contorlList.Count == 0)
{
return;
}
for (int i = 0; i < modulePermissionIdList.Count; i++)
{
permissionControlMappingList = permissionControlMappingDataProvider.GetPermissionControlMappingList(modulePermissionIdList[i]);
if (permissionControlMappingList == null || permissionControlMappingList.Count == 0)
{
continue;
}
for (int j = 0; j < arrayListServerIds.Count; j++)
{
serverStyles = string.Empty;
foreach (保密.DSS.PersistentModel.PermissionControlMapping permissionControlMapping in permissionControlMappingList)
{
if (arrayListServerIds[j] == null)
{
break;
}
if (permissionControlMapping.ModuleControl.ControlId.Equals(arrayListServerIds[j].ToString()))
{
//serverStyles += permissionControlMapping.ToViewModel().Style;
((System.Web.UI.WebControls.WebControl)contorlList[j]).Attributes.Add(
permissionControlMapping.ModuleControl.StyleSetting.AttributeName, permissionControlMapping.ModuleControl.StyleSetting.AttributeValue);
}
}
//if (!string.IsNullOrEmpty(serverStyles))
//{
// arrayListServerStyles.Add(serverStyles);
//}
//else
//{
// arrayListServerStyles.Add(defaultStyle);
//}
}
//取客户端控件ID和样式
foreach (保密.DSS.PersistentModel.PermissionControlMapping permissionControlMapping in permissionControlMappingList)
{
string id = permissionControlMapping.ModuleControl.ControlId;
//string stringStyle = permissionControlMapping.ToViewModel().Style;
string stringKey = permissionControlMapping.ModuleControl.StyleSetting.AttributeName;
string stringValue = permissionControlMapping.ModuleControl.StyleSetting.AttributeValue;
//循环每一个ModulePermissionId+ModuleControlId确定的唯一对象:只对服务端控件
if (!arrayListServerIds.Contains(id))
{
if (!dictionaryClients.ContainsKey(id))
{
dictionaryClients.Add(id, stringKey + sum + stringValue);
}
else
{
//dictionaryClients[id] = dictionaryClients[id] + stringStyle;
dictionaryClients[id] = dictionaryClients[id] + dollarShape + stringKey + sum + stringValue;
}
}
}
////对服务端控件的样式添加
//for (int k = 0; k < arrayListServerIds.Count; k++)
//{
// if (!arrayListServerStyles[k].ToString().Equals(defaultStyle))
// {
// ((System.Web.UI.WebControls.WebControl)contorlList[k]).Attributes.Add(style, arrayListServerStyles[k].ToString());
// }
//}
//arrayListServerStyles.Clear();
}
if (permissionControlMappingList != null && permissionControlMappingList.Count > 0)
{
/*//不能这样写: 对客户端控件的样式进行拼装:id,style;-id,style; 前台就按先按“-”分隔,然后按“,”分隔*/
//目前数据库配的应该按这种操作:对客户端控件的样式进行拼装:id$style+value$disabled+disabled-id$style+value$disabled+disabled 前台就按先按“-”分隔,然后按“$”分隔
foreach (string key in dictionaryClients.Keys)
{
_clientStyles += key + dollarShape + dictionaryClients[key] + decollator;
}
}
}
}
/// <summary>
/// Recursively to obtain all required control type
/// </summary>
/// <param name="control">Web control</param>
/// <param name="contorlList">A collection of objects that contains the control</param>
/// <param name="arrayListId">A collection that contains the control id</param>
protected void GetControls(System.Web.UI.Control control, IList<System.Web.UI.WebControls.WebControl> contorlList,
ArrayList arrayListId)
{
if (!control.HasControls())
{
if (control is WebControl)
{
contorlList.Add(control as WebControl);
arrayListId.Add(control.ID);
}
return;
}
foreach (System.Web.UI.Control controlinner in control.Controls)
{
GetControls(controlinner, contorlList, arrayListId);
}
}
回答问题要查资料?用《Csdn收音机》可以最快速度搞定!
补充:.NET技术 , ASP.NET