当前位置:编程学习 > C#/ASP.NET >>

对权限的控制,控制到页面的按钮(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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,