Example #1
0
        public override AuthorizeModel GetCurrnetUserAuthorize()
        {
            //由于是循环依赖注入,导致此处要解决循环依赖的问题,所以在此处特殊处理。后续可能需要同步进行修改
            //2021-08-25 By xufeng
            if (EngineContext.Current.HttpContext == null || !EngineContext.Current.HttpContext.User.IsAuthenticated())
            {
                return(new AuthorizeModel());
            }

            var key =
                $"{GirvsAuthorizePermissionCacheKeyManager.CurrentUserAuthorizeCacheKeyPrefix}:{EngineContext.Current.ClaimManager.GetUserId()}";

            var authorize = _staticCacheManager.Get(
                new CacheKey(key).Create(), () =>
            {
                var dbContext = EngineContext.Current.Resolve <BasicManagementDbContext>();

                var userId = EngineContext.Current.ClaimManager.GetUserId().ToHasGuid();

                var user = dbContext.Users.AsNoTracking().Include(x => x.Roles).Include(x => x.RulesList)
                           .FirstOrDefault(x => x.Id == userId);
                //如果当前用户类型为管理员或者租户管理员,则直接返回
                if (user.UserType is UserType.AdminUser or UserType.TenantAdminUser)
                {
                    var result = new AuthorizeModel
                    {
                        AuthorizePermissions = GetFunctionOperateList(dbContext, user),
                        AuthorizeDataRules   = GetDataRuleList(dbContext, user)
                    };
                    return(result);
                }

                var currentUserRole      = user.Roles.Select(x => x.Id).ToArray();
                var userBasalPermissions = dbContext.BasalPermissions.AsNoTracking().Where(x => x.AppliedID ==
                                                                                           userId).ToList();
                ;
                var roleBasalPermissions = dbContext.BasalPermissions.AsNoTracking()
                                           .Where(x => currentUserRole.Contains(x.AppliedID)).ToList();
                var mergeBasalPermissions = userBasalPermissions.Union(roleBasalPermissions).ToList();
                mergeBasalPermissions     =
                    PermissionHelper.MergeValidateObjectTypePermission(mergeBasalPermissions);


                var permissionViewModels =
                    mergeBasalPermissions.Select(p => new AuthorizePermissionModel()
                {
                    ServiceId   = p.AppliedObjectID,
                    Permissions = PermissionHelper.ConvertPermissionToString(p).ToDictionary(x => x, x => x)
                }).ToList();

                var authorizeDataRuleModels = PermissionHelper.ConvertAuthorizeDataRuleModels(user.RulesList);

                return(new AuthorizeModel()
                {
                    AuthorizePermissions = permissionViewModels,
                    AuthorizeDataRules = authorizeDataRuleModels
                });
            });
Example #2
0
        public async Task <AuthorizeModel> GetCurrentUserAuthorization(Guid userId)
        {
            var allAuthorizePermissions = (await _authorizationService.GetFunctionOperateList()).ToList();
            var allAuthorizeDataRules   = (await _authorizationService.GetDataRuleList()).ToList();
            var user = await _userRepository.GetUserByIdIncludeRoleAndDataRule(userId);

            //如果当前用户类型为管理员或者租户管理员,则直接返回
            if (user.UserType is UserType.AdminUser or UserType.TenantAdminUser)
            {
                var result = new AuthorizeModel
                {
                    AuthorizePermissions = allAuthorizePermissions,
                    AuthorizeDataRules   = allAuthorizeDataRules
                };
                return(result);
            }

            var currentUserRole      = user.Roles.Select(x => x.Id).ToArray();
            var userBasalPermissions = await _permissionRepository.GetUserPermissionLimit(user.Id);

            var roleBasalPermissions = await _permissionRepository.GetRoleListPermissionLimit(currentUserRole);

            var mergeBasalPermissions = userBasalPermissions.Union(roleBasalPermissions).ToList();

            mergeBasalPermissions = PermissionHelper.MergeValidateObjectTypePermission(mergeBasalPermissions);


            var permissionViewModels =
                mergeBasalPermissions
                .Where(p => allAuthorizePermissions.Any(a => a.ServiceId == p.AppliedObjectID))
                .Select(p =>
            {
                var currentServicePermission =
                    allAuthorizePermissions.FirstOrDefault(x => x.ServiceId == p.AppliedObjectID);
                if (currentServicePermission != null)
                {
                    var convertPermissionList = PermissionHelper.ConvertPermissionToString(p);
                    var permissions           = new Dictionary <string, string>();

                    foreach (var keyValue in convertPermissionList)
                    {
                        foreach (var keyValuePair in currentServicePermission.Permissions.Where(keyValuePair =>
                                                                                                keyValuePair.Value == keyValue))
                        {
                            permissions.TryAdd(keyValuePair.Key, keyValue);
                        }
                    }

                    return(new AuthorizePermissionModel()
                    {
                        ServiceName = currentServicePermission?.ServiceName,
                        ServiceId = p.AppliedObjectID,
                        Permissions = permissions
                    });
                }

                return(new AuthorizePermissionModel());
            }).ToList();

            var authorizeDataRuleModels = PermissionHelper.ConvertAuthorizeDataRuleModels(user.RulesList);

            return(new AuthorizeModel()
            {
                AuthorizePermissions = permissionViewModels,
                AuthorizeDataRules = authorizeDataRuleModels
            });
        }