/// <summary>
        /// 保存权限
        /// </summary>
        /// <param name="roleFid"></param>
        /// <param name="roleauthlist"></param>
        /// <returns></returns>
        public bool SetRoleAuth(Guid roleFid, List <RoleAuthInfo> roleauthlist)
        {
            ///授权项
            List <RoleAuthInfo> roleauths = roleauthlist.Where(d => d.IsAuth.GetValueOrDefault()).ToList();
            ///清除授权项
            List <RoleAuthInfo> roleunauths = roleauthlist.Where(d => !d.IsAuth.GetValueOrDefault()).ToList();
            ///当前角色对应的授权项信息
            List <RoleAuthInfo> roleauthnows = new RoleAuthDAL().GetList("and [VALID_FLAG] <> 0 "
                                                                         + "and [ROLE_FID] = '" + roleFid + "'", string.Empty);
            ///INSERT LIST
            List <RoleAuthInfo> insertlist        = new List <RoleAuthInfo>();
            List <RoleAuthInfo> updatelist        = new List <RoleAuthInfo>();
            List <RoleAuthInfo> updateReverselist = new List <RoleAuthInfo>();

            ///比对现有库中该角色的权限,提取需要插入和反转的权限
            foreach (var roleauth in roleauths)
            {
                var roleauthnow = roleauthnows.FirstOrDefault(d => d.AuthType == roleauth.AuthType &&
                                                              d.AuthSourceFid == roleauth.AuthSourceFid);
                if (roleauthnow == null)
                {
                    insertlist.Add(roleauth);
                }
                else
                {
                    if (!roleauthnow.IsAuth.GetValueOrDefault())
                    {
                        updatelist.Add(roleauthnow);
                    }
                }
            }
            ///比对现有库中该角色的权限,提取需要反转的权限
            foreach (var roleunauth in roleunauths)
            {
                var roleauthnow = roleauthnows.FirstOrDefault(d => d.AuthType == roleunauth.AuthType &&
                                                              d.AuthSourceFid == roleunauth.AuthSourceFid &&
                                                              d.IsAuth.GetValueOrDefault());
                if (roleauthnow != null)
                {
                    updateReverselist.Add(roleauthnow);
                }
            }
            using (var trans = new TransactionScope())
            {
                if (!new RoleAuthDAL().InsertList(insertlist, roleFid, ""))
                {
                    throw new Exception("Role Auth Error");
                }
                if (!new RoleAuthDAL().ReverseAuthList(updatelist))
                {
                    throw new Exception("Role Auth Error");
                }
                if (!new RoleAuthDAL().ReverseIsAuthList(updateReverselist))
                {
                    throw new Exception("Role Auth Error");
                }
                trans.Complete();
            }
            return(true);
        }
        /// <summary>
        /// 获取客户端按钮根据菜单动作按钮
        /// </summary>
        /// <param name="userFid"></param>
        /// <returns></returns>
        public DataTable GetClientMenusActionByUser(Guid userFid)
        {
            ///授权
            List <Guid> sourceFids = new RoleAuthDAL().GetSourceFidsByUserFid(userFid, (int)AuthTypeConstants.MENU);

            if (sourceFids.Count == 0)
            {
                return(dal.GetMenuActionByUser("XC.[MENU_TYPE] = " + (int)MenuTypeConstants.ClientMenu + " and XC.[NEED_AUTH] = 0"));
            }
            return(dal.GetMenuActionByUser("XC.[MENU_TYPE] = " + (int)MenuTypeConstants.ClientMenu + " and (XC.[FID] in ('" + string.Join("','", sourceFids.ToArray()) + "') or XC.[NEED_AUTH] = 0)"));
        }
Example #3
0
        /// <summary>
        /// 根据角色获取菜单项
        /// </summary>
        /// <param name="roleFid"></param>
        /// <returns></returns>
        public List <MenuInfo> GetMenusByRoleFid(Guid roleFid)
        {
            ///权限
            List <Guid> sourceFids = new RoleAuthDAL().GetSourceFidsByRoleFid(roleFid, (int)AuthTypeConstants.MENU);

            if (sourceFids.Count == 0)
            {
                return(dal.GetList("[MENU_TYPE] in (" + (int)MenuTypeConstants.WebModule + "," + (int)MenuTypeConstants.WebMenu + ") and [NEED_AUTH] = 0", "[DISPLAY_ORDER]"));
            }
            return(dal.GetList("[MENU_TYPE] in (" + (int)MenuTypeConstants.WebModule + "," + (int)MenuTypeConstants.WebMenu + ") and ([FID] in ('" + string.Join("','", sourceFids.ToArray()) + "') or [NEED_AUTH] = 0)", "[DISPLAY_ORDER]"));
        }
Example #4
0
        /// <summary>
        /// 获取客户端菜单
        /// </summary>
        /// <param name="userFid"></param>
        /// <returns></returns>
        public List <MenuInfo> GetClientMenus(Guid userFid)
        {
            ///授权
            List <Guid> sourceFids = new RoleAuthDAL().GetSourceFidsByUserFid(userFid, (int)AuthTypeConstants.MENU);

            if (sourceFids.Count == 0)
            {
                return(dal.GetList("[MENU_TYPE] = " + (int)MenuTypeConstants.ClientMenu + " and [NEED_AUTH] = 0", "[DISPLAY_ORDER]"));
            }
            return(dal.GetList("[MENU_TYPE] = " + (int)MenuTypeConstants.ClientMenu + " and ([FID] in ('" + string.Join("','", sourceFids.ToArray()) + "') or [NEED_AUTH] = 0)", "[DISPLAY_ORDER]"));
        }
Example #5
0
        public List <MenuInfo> GetClientMenusByRoleFid(Guid roleFid)
        {
            ///权限
            List <Guid> sourceFids = new RoleAuthDAL().GetSourceFidsByRoleFid(roleFid, 1);

            if (sourceFids.Count == 0)
            {
                return(new List <MenuInfo>());
            }
            ///仅获取WEB菜单
            return(dal.GetList("and [VALID_FLAG] <> 0 and [MENU_TYPE] in (30) "
                               + "and [FID] in ('" + string.Join("','", sourceFids.ToArray()) + "')", "[DISPLAY_ORDER]"));
        }
Example #6
0
        public List <ActionInfo> GetActionsByMenuRoleFid(Guid menuFid, Guid roleFid)
        {
            List <MenuActionInfo> list = dal.GetList("and [MENU_FID] = '" + menuFid + "'", string.Empty);

            if (list.Count == 0)
            {
                return(new List <ActionInfo>());
            }
            List <Guid> notNeedAuthFids = list.Where(d => !d.NeedAuth.GetValueOrDefault()).Select(d => d.ActionFid.GetValueOrDefault()).ToList();
            ///权限
            List <Guid> sourceFids
                = new RoleAuthDAL().GetAuthSourceFidsByRoleFidAuthTypeInSourceFids(roleFid
                                                                                   , 2
                                                                                   , "'" + string.Join("','", list.Select(d => d.Fid.GetValueOrDefault()).ToArray()) + "'");
            string actionFidCondition = string.Empty;

            if (sourceFids.Count > 0)
            {
                List <Guid> actionFids = list.Where(d => sourceFids.Contains(d.Fid.GetValueOrDefault())).Select(d => d.ActionFid.GetValueOrDefault()).ToList();
                if (actionFids.Count > 0)
                {
                    actionFidCondition += ",'" + string.Join("','", actionFids.ToArray()) + "'";
                }
            }
            if (notNeedAuthFids.Count > 0)
            {
                actionFidCondition += ",'" + string.Join("','", notNeedAuthFids.ToArray()) + "'";
            }
            if (string.IsNullOrEmpty(actionFidCondition))
            {
                return(new List <ActionInfo>());
            }
            List <ActionInfo> actionList = new ActionDAL().GetList("and [FID] in (" + actionFidCondition.Substring(1) + ")"
                                                                   , string.Empty);

            foreach (var actionInfo in actionList)
            {
                var info = list.SingleOrDefault(d => d.ActionFid == actionInfo.Fid);
                if (info == null)
                {
                    continue;
                }
                actionInfo.DisplayOrder = info.ActionOrder.GetValueOrDefault();
                actionInfo.ClientJs     = info.ClientJs;
                actionInfo.Fid          = info.Fid;
            }
            return(actionList.OrderBy(d => d.DisplayOrder).ToList());
        }
        public bool SetRoleAuth(Guid roleFid, List <Guid> authSourceFids, bool setFlag, string modifyUser)
        {
            List <RoleAuthInfo> list = new RoleAuthDAL().GetList("and [VALID_FLAG] <> 0 "
                                                                 + "and [ROLE_FID] = '" + roleFid + "' "
                                                                 + "and [AUTH_SOURCE_FID] in ('" + string.Join("','", authSourceFids.ToArray()) + "')", string.Empty);
            string sql = string.Empty;

            foreach (var authSourceFid in authSourceFids)
            {
                var info = list.FirstOrDefault(d => d.AuthSourceFid == authSourceFid);
                if (info == null)
                {
                    if (!setFlag)
                    {
                        continue;
                    }
                    int authType = GetAuthType(authSourceFid);
                    if (authType == 0)
                    {
                        continue;
                    }
                    sql += "insert into dbo.[TS_SYS_ROLE_AUTH] "
                           + "([FID],[ROLE_FID],[AUTH_TYPE],[IS_AUTH],[AUTH_SOURCE_FID],[VALID_FLAG],[CREATE_USER],[CREATE_DATE]) "
                           + "values (NEWID(),'" + roleFid + "'," + authType + ",1,'" + authSourceFid + "',1,'" + modifyUser + "',GETDATE());";
                    continue;
                }
                if (info.IsAuth.GetValueOrDefault() == setFlag)
                {
                    continue;
                }
                sql += "update dbo.[TS_SYS_ROLE_AUTH] "
                       + "set [IS_AUTH] = " + (setFlag ? 1 : 0) + ",[MODIFY_USER] = '" + modifyUser + "',[MODIFY_DATE] = GETDATE() "
                       + "where [ID] = " + info.Id + ";";
            }
            if (string.IsNullOrEmpty(sql))
            {
                return(true);
            }
            return(CommonDAL.ExecuteNonQueryBySql(sql));
        }
Example #8
0
        /// <summary>
        /// 只获取弹出窗体的授权动作
        /// </summary>
        /// <param name="menuFid"></param>
        /// <param name="roleFid"></param>
        /// <param name="entityName"></param>
        /// <param name="formEditWidth"></param>
        /// <param name="formEditHeight"></param>
        /// <param name="formUrl"></param>
        /// <returns></returns>
        public List <ActionInfo> GetFormActions(Guid menuFid, Guid roleFid, string entityName, out int formEditWidth, out int formEditHeight, out string formUrl)
        {
            ///out默认值
            formEditWidth  = 800;
            formEditHeight = 480;
            formUrl        = string.Empty;
            ///弹出窗体,在菜单管理中限制同级菜单名称不能重复
            MenuInfo formMenuInfo = new MenuDAL().GetInfo(entityName, menuFid);

            if (formMenuInfo == null)
            {
                throw new Exception("MC:0x00000028");///菜单数据错误
            }
            ///窗体属性
            formEditWidth  = formMenuInfo.EditFormWidth.GetValueOrDefault();
            formEditHeight = formMenuInfo.EditFormHeight.GetValueOrDefault();
            formUrl        = formMenuInfo.LinkUrl;

            ///所有按钮,后期按MENU_FID区分
            List <MenuActionInfo> menuAtions = dal.GetList("[MENU_FID] = N'" + formMenuInfo.Fid.GetValueOrDefault() + "'", string.Empty);

            ///无按钮
            if (menuAtions.Count == 0)
            {
                return(new List <ActionInfo>());
            }
            ///不需要授权页面按钮的FID
            List <Guid> menuActionFids = menuAtions.Where(d => !d.NeedAuth.GetValueOrDefault()).Select(d => d.Fid.GetValueOrDefault()).ToList();
            ///获取已授权的按钮GUID
            List <Guid> sourceFids = new RoleAuthDAL().GetAuthSourceFidsByRoleFidAuthTypeInSourceFids(roleFid
                                                                                                      , (int)AuthTypeConstants.ACTION///授权类型为按钮
                                                                                                      , menuAtions.Count(d => d.NeedAuth.GetValueOrDefault()) == 0 ? string.Empty : "'" + string.Join("','", menuAtions.Where(d => d.NeedAuth.GetValueOrDefault()).Select(d => d.Fid.GetValueOrDefault()).ToArray()) + "'");

            ///可以显示的页面按钮
            menuActionFids.AddRange(sourceFids);
            if (menuActionFids.Count == 0)
            {
                return(new List <ActionInfo>());
            }
            ///获取所有的动作按钮
            List <ActionInfo> actionList  = new ActionDAL().GetList("[FID] in ('" + string.Join("','", menuAtions.Where(d => menuActionFids.Contains(d.Fid.GetValueOrDefault())).Select(d => d.ActionFid.GetValueOrDefault()).ToArray()) + "')", string.Empty);
            List <ActionInfo> actionInfos = new List <ActionInfo>();

            foreach (var menuActionFid in menuActionFids)
            {
                MenuActionInfo menuActionInfo = menuAtions.FirstOrDefault(d => d.Fid.GetValueOrDefault() == menuActionFid);
                if (menuActionInfo == null)
                {
                    continue;
                }
                ActionInfo actionInfo = actionList.FirstOrDefault(d => d.Fid.GetValueOrDefault() == menuActionInfo.ActionFid.GetValueOrDefault()).Clone();
                if (actionInfo == null)
                {
                    continue;
                }
                actionInfo.IsListAction = false;
                actionInfo.DisplayOrder = menuActionInfo.ActionOrder.GetValueOrDefault();
                actionInfo.ClientJs     = menuActionInfo.ClientJs;
                actionInfo.Fid          = menuActionInfo.Fid;
                actionInfo.DetailFlag   = menuActionInfo.DetailFlag.GetValueOrDefault();
                actionInfos.Add(actionInfo);
            }
            return(actionInfos.OrderBy(d => d.DisplayOrder).ToList());
        }
        /// <summary>
        /// 获取所有需要授权的项目,其中IS_AUTH=TRUE表示已经授权
        /// </summary>
        /// <param name="roleFid"></param>
        /// <returns></returns>
        public List <RoleAuthInfo> GetRoleAuthList(Guid roleFid)
        {
            ///需要授权的菜单
            List <MenuInfo> menus = new MenuDAL().GetList("and [VALID_FLAG] <> 0", string.Empty);
            ///需要授权的功能项
            List <MenuActionInfo> menuactions = new MenuActionDAL().GetList("and [VALID_FLAG] <> 0", string.Empty);
            ///功能项
            List <ActionInfo> actions = new ActionDAL().GetList("and [VALID_FLAG] <> 0", string.Empty);
            ///需要授权的报表
            List <ReportInfo> reports = new ReportDAL().GetList("and [VALID_FLAG] <> 0", string.Empty);
            ///需要授权的图表
            List <ChartInfo> charts = new ChartDAL().GetList("and [VALID_FLAG] <> 0", string.Empty);
            ///角色对应已授权的项目
            List <RoleAuthInfo> roleauths = new RoleAuthDAL().GetList("and [ROLE_FID] = '" + roleFid + "' and [IS_AUTH] <> 0 and [VALID_FLAG] <> 0", string.Empty);

            List <RoleAuthInfo> list = new List <RoleAuthInfo>();

            ///菜单
            foreach (var item in menus)
            {
                RoleAuthInfo info = new RoleAuthInfo();
                info.AuthSourceFid  = item.Fid;
                info.AuthSourceName = item.MenuName + "|" + item.MenuNameCn;
                info.AuthType       = 1;
                info.AuthTypeName   = "菜单";
                info.DisplayOrder   = item.DisplayOrder.GetValueOrDefault();
                if (item.NeedAuth.GetValueOrDefault())
                {
                    var roleauth = roleauths.FirstOrDefault(d => d.AuthSourceFid == item.Fid && d.AuthType == 1);
                    info.IsAuth = roleauth == null ? false : true;
                }
                else
                {
                    info.IsAuth = true;
                }
                info.ParentSourceFid = item.ParentMenuFid.GetValueOrDefault();
                list.Add(info);
            }
            ///功能
            foreach (var item in menuactions)
            {
                RoleAuthInfo info = new RoleAuthInfo();
                info.AuthSourceFid = item.Fid;
                var action = actions.FirstOrDefault(d => d.Fid == item.ActionFid);
                if (action == null)
                {
                    continue;
                }
                info.AuthSourceName = action.ActionName + "|" + action.ActionNameCn;
                info.AuthType       = 2;
                info.AuthTypeName   = "功能";
                info.DisplayOrder   = item.ActionOrder.GetValueOrDefault();
                if (item.NeedAuth.GetValueOrDefault())
                {
                    var roleauth = roleauths.FirstOrDefault(d => d.AuthSourceFid == item.Fid && d.AuthType == 2);
                    info.IsAuth = roleauth == null ? false : true;
                }
                else
                {
                    info.IsAuth = true;
                }
                info.ParentSourceFid = item.MenuFid.GetValueOrDefault();
                var menuinfo = list.FirstOrDefault(d => d.AuthType == 1 && d.AuthSourceFid == item.MenuFid);
                if (menuinfo == null)
                {
                    continue;
                }
                list.Add(info);
            }
            RoleAuthInfo reportauth = new RoleAuthInfo();

            reportauth.AuthSourceFid   = Guid.Parse("2238F7AD-9196-4B53-A0D0-81460FDA1F4C");
            reportauth.AuthSourceName  = "REPORT|报表";
            reportauth.AuthType        = 1;
            reportauth.AuthTypeName    = "菜单";
            reportauth.IsAuth          = true;
            reportauth.DisplayOrder    = int.MaxValue - 1;
            reportauth.ParentSourceFid = Guid.Empty;
            list.Add(reportauth);
            ///报表
            foreach (var item in reports)
            {
                RoleAuthInfo info = new RoleAuthInfo();
                info.AuthSourceFid  = item.Fid;
                info.AuthSourceName = item.NameEn + "|" + item.Name;
                info.AuthType       = 3;
                info.AuthTypeName   = "报表";
                if (item.IsAuth.GetValueOrDefault())
                {
                    var roleauth = roleauths.FirstOrDefault(d => d.AuthSourceFid == item.Fid && d.AuthType == 3);
                    info.IsAuth = roleauth == null ? false : true;
                }
                else
                {
                    info.IsAuth = true;
                }
                info.ParentSourceFid = reportauth.AuthSourceFid.GetValueOrDefault();
                list.Add(info);
            }
            RoleAuthInfo chartauth = new RoleAuthInfo();

            chartauth.AuthSourceFid   = Guid.Parse("6E714DD6-2D41-45AE-88C2-433EEF1973E9");
            chartauth.AuthSourceName  = "CHART|图表";
            chartauth.AuthType        = 1;
            chartauth.AuthTypeName    = "菜单";
            chartauth.IsAuth          = true;
            chartauth.DisplayOrder    = int.MaxValue;
            chartauth.ParentSourceFid = Guid.Empty;
            list.Add(chartauth);
            ///图表
            foreach (var item in charts)
            {
                RoleAuthInfo info = new RoleAuthInfo();
                info.AuthSourceFid  = item.Fid;
                info.AuthSourceName = item.NameEn + "|" + item.Name;
                info.AuthType       = 4;
                info.AuthTypeName   = "图表";
                if (item.IsAuth.GetValueOrDefault())
                {
                    var roleauth = roleauths.FirstOrDefault(d => d.AuthSourceFid == item.Fid && d.AuthType == 4);
                    info.IsAuth = roleauth == null ? false : true;
                }
                else
                {
                    info.IsAuth = true;
                }
                info.ParentSourceFid = chartauth.AuthSourceFid.GetValueOrDefault();
                list.Add(info);
            }
            return(list.OrderBy(d => d.DisplayOrder).ToList());
        }