Example #1
0
        /// <summary>
        /// 由于用户姓名是可变的因此优先从缓存中获取
        /// </summary>
        /// <param name="claimType"></param>
        /// <returns></returns>
        private string GetClaimUserNameValue(string claimType)
        {
            if (base.UserId != null)
            {
                var user = _cacheManagerExtens.GetUserInfoCache(base.UserId.Value);
                return(user.UserNameCn);
            }

            return(GetClaimValue(claimType));
        }
        public object GetUserPermission()
        {
            List <RoleToPermissionCache> resData = new List <RoleToPermissionCache>();
            List <string> roleList = AbpSession.UserRoleList;

            foreach (var item in roleList)
            {
                //获取的是动作按钮授权
                var permissionList = _cacheManagerExtens.GetRoleToPermissionCache(Convert.ToInt64(item));
                //.Where(w => !string.IsNullOrEmpty(w.PermissionName));
                foreach (var pitem in permissionList.ToList())
                {
                    var data = resData.Where(w =>
                                             w.MenuId == pitem.MenuId &&
                                             w.HandleName == pitem.HandleName &&
                                             w.PermissionName == pitem.PermissionName
                                             );
                    if (!data.Any())
                    {
                        resData.Add(pitem);
                    }
                }
            }

            List <MenuActionPermissionCache> menuActionPermissionList = _cacheManagerExtens.GetMenuActionPermissionCache();
            var permissionData = menuActionPermissionList.Where(w => w.IsActive == true && w.RequiresAuthModel != "3");

            foreach (var item in permissionData)
            {
                var data = resData.Where(w =>
                                         (w.MenuId == item.MenuId && w.HandleName == item.MenuName && item.IsMenu && w.PermissionName == item.PermissionName) ||
                                         (w.MenuId == item.MenuId && w.HandleName == item.ActionName && !item.IsMenu && w.PermissionName == item.PermissionName)
                                         );
                if (!data.Any())
                {
                    resData.Add(new RoleToPermissionCache()
                    {
                        MenuName   = item.MenuName,
                        HandleName = item.IsMenu? item.MenuName: item.ActionName
                    });
                }
            }

            var userData = _cacheManagerExtens.GetUserInfoCache(AbpSession.UserId.Value);

            return(new
            {
                User = new
                {
                    UserNameCn = AbpSession.UserNameCn,
                    UserCode = AbpSession.UserCode,
                    IsAdmin = AbpSession.IsAdmin,
                    ImageUrl = userData.ImageUrl,
                    OrgCode = userData.OrgCode
                },
                Permission = resData
            });
        }
        /// <summary>
        /// 发送点对点消息
        /// </summary>
        /// <param name="recipientId"></param>
        /// <param name="chatDetailed"></param>
        /// <param name="severity"></param>
        /// <returns></returns>
        public virtual async Task SendChatAsync(long recipientId, string chatDetailed, NotificationSeverity severity = NotificationSeverity.Info)
        {
            UserIdentifier userIdentifier = new UserIdentifier(AbpSessionExtens.TenantId, recipientId);
            //用户不在线直接返回
            var onlineClients = _onlineClientManager.GetAllByUserId(userIdentifier);

            if (onlineClients == null || onlineClients.Count == 0)
            {
                return;
            }

            UserInfo userModel     = _cacheManagerExtens.GetUserInfoCache(recipientId);
            string   promptContent = "您有一条来自[" + userModel.UserNameCn + "]的消息";
            string   promptTitle   = "您有一条新消息";

            FrameNotificationData frameNotificationData = new FrameNotificationData(promptContent);

            frameNotificationData.NotificationType     = "chat"; //推送的类型用于前端JS判断
            frameNotificationData.Title                = promptTitle;
            frameNotificationData.NotificationDetailed = chatDetailed;
            frameNotificationData.SendId               = AbpSessionExtens.UserId.Value;

            TenantNotification tenantNotification = new TenantNotification()
            {
                Id               = Guid.NewGuid(),
                Data             = frameNotificationData,
                Severity         = severity,
                NotificationName = "站内短信",
                TenantId         = userIdentifier.TenantId,
                CreationTime     = DateTime.Now
            };

            List <UserNotification> userNotification = new List <UserNotification>();

            userNotification.Add(
                new UserNotification
            {
                Id           = Guid.NewGuid(),
                Notification = tenantNotification,
                UserId       = userIdentifier.UserId,
                State        = UserNotificationState.Unread,
                TenantId     = userIdentifier.TenantId
            });

            await _realTimeNotifier.SendNotificationsAsync(userNotification.ToArray());
        }
        /// <summary>
        /// 获取指定用户的授权
        /// </summary>
        /// <param name="user"></param>
        /// <param name="permissionName"></param>
        /// <returns></returns>
        //[UnitOfWork]
        public async Task <bool> IsGrantedAsync(UserIdentifier user, string permissionName)
        {
            UserInfo userInfo = _cacheManagerExtens.GetUserInfoCache(user.UserId);

            return(await IsValidationGrantedAsync(userInfo, permissionName));
        }
        public object GetUserPermission()
        {
            List <RoleToPermissionCache> resData = new List <RoleToPermissionCache>();
            //通过session获取当前登录用户角色集合
            List <string> roleList = AbpSession.UserRoleList;

            #region 获取菜单以及动作按钮授权
            foreach (var item in roleList)
            {
                var permissionList = _cacheManagerExtens.GetRoleToPermissionCache(Convert.ToInt64(item)); //.Where(w => !string.IsNullOrEmpty(w.PermissionName));
                foreach (var pitem in permissionList.ToList())
                {
                    //去重复
                    var data = resData.Where(w => w.MenuId == pitem.MenuId && w.HandleName == pitem.HandleName && w.PermissionName == pitem.PermissionName);
                    if (!data.Any())
                    {
                        resData.Add(pitem);
                    }
                }
            }
            #endregion

            /*
             * RequiresAuthModel
             *  开放模式 = 1 (不受权限控制)
             *  登陆模式 = 2 (所有登录用户)
             *  授权模式 = 3 (授权模式)
             */
            #region 加载不需要授权的菜单以及动作按钮授权
            List <MenuActionPermissionCache> menuActionPermissionList = _cacheManagerExtens.GetMenuActionPermissionCache();
            var permissionData = menuActionPermissionList.Where(w => w.IsActive == true && w.RequiresAuthModel != "3");
            foreach (var item in permissionData)
            {
                var data = resData.Where(w =>
                                         (w.MenuId == item.MenuId && w.HandleName == item.MenuName && item.IsMenu && w.PermissionName == item.PermissionName) ||
                                         (w.MenuId == item.MenuId && w.HandleName == item.ActionName && !item.IsMenu && w.PermissionName == item.PermissionName)
                                         );
                if (!data.Any())
                {
                    resData.Add(new RoleToPermissionCache()
                    {
                        MenuName   = item.MenuName,
                        HandleName = item.IsMenu ? item.MenuName : item.ActionName
                    });
                }
            }
            #endregion

            //登录用户信息
            var userData = _cacheManagerExtens.GetUserInfoCache(AbpSession.UserId.Value);

            return(new
            {
                User = new
                {
                    UserNameCn = AbpSession.UserNameCn,
                    UserCode = AbpSession.UserCode,
                    IsAdmin = AbpSession.IsAdmin,
                    ImageUrl = userData.ImageUrl,
                    OrgCode = userData.OrgCode
                },
                Permission = resData
            });
        }