Пример #1
0
        //
        // 授予授权范围的实现部分
        //

        #region private string GrantRole(BasePermissionScopeManager manager, string id, string userId, string grantRoleId) 为了提高授权的运行速度
        /// <summary>
        /// 为了提高授权的运行速度
        /// </summary>
        /// <param name="manager">权限范围管理器</param>
        /// <param name="systemCode">系统编号</param>
        /// <param name="userId">用户主键</param>
        /// <param name="grantRoleId">权限主键</param>
        /// <param name="permissionCode">权限编号</param>
        /// <returns>主键</returns>
        private string GrantRole(BasePermissionScopeManager manager, string systemCode, string userId, string grantRoleId, string permissionCode)
        {
            var result = string.Empty;

            var permissionId = new BaseModuleManager().GetIdByCodeByCache(systemCode, permissionCode);

            if (!string.IsNullOrEmpty(permissionId))
            {
                // 对应哪个角色
                var roleTableName = systemCode + "Role";
                var entity        = new BasePermissionScopeEntity
                {
                    PermissionId     = permissionId.ToInt(),
                    ResourceCategory = BaseUserEntity.CurrentTableName,
                    ResourceId       = userId.ToInt(),
                    TargetCategory   = roleTableName,
                    TargetId         = grantRoleId.ToInt(),
                    Enabled          = 1,
                    Deleted          = 0
                };
                result = manager.Add(entity, true, false);
            }

            return(result);
        }
        //
        // 授予授权范围的实现部分
        //

        #region private string GrantModule(BasePermissionScopeManager manager, string id, string userId, string grantModuleId) 为了提高授权的运行速度
        /// <summary>
        /// 为了提高授权的运行速度
        /// </summary>
        /// <param name="permissionScopeManager">权限域读写器</param>
        /// <param name="systemCode">系统编码</param>
        /// <param name="userId">用户主键</param>
        /// <param name="grantModuleId">权限主键</param>
        /// <param name="permissionCode">权限编号</param>
        /// <returns>主键</returns>
        private string GrantModule(BasePermissionScopeManager permissionScopeManager, string systemCode, string userId, string grantModuleId, string permissionCode)
        {
            var result = string.Empty;
            var resourcePermissionScopeEntity = new BasePermissionScopeEntity();
            var permissionId = new BaseModuleManager().GetIdByCodeByCache(systemCode, permissionCode);

            if (string.IsNullOrEmpty(permissionId))
            {
                return(string.Empty);
            }
            resourcePermissionScopeEntity.PermissionId     = permissionId.ToInt();
            resourcePermissionScopeEntity.ResourceCategory = BaseUserEntity.CurrentTableName;
            resourcePermissionScopeEntity.ResourceId       = userId.ToInt();
            resourcePermissionScopeEntity.TargetCategory   = BaseModuleEntity.CurrentTableName;
            resourcePermissionScopeEntity.TargetId         = grantModuleId.ToInt();
            resourcePermissionScopeEntity.Enabled          = 1;
            resourcePermissionScopeEntity.Deleted          = 0;
            return(permissionScopeManager.Add(resourcePermissionScopeEntity));
        }
        /// <summary>
        /// 为了提高授权的运行速度
        /// </summary>
        /// <param name="manager">权限域读写器</param>
        /// <param name="systemCode">系统编码</param>
        /// <param name="userId">用户主键</param>
        /// <param name="grantOrganizationId">权组织机构限主键</param>
        /// <param name="permissionCode">权限编号</param>
        /// <param name="containChild"></param>
        /// <returns>主键</returns>
        private string GrantOrganization(BasePermissionScopeManager manager, string systemCode, string userId, string grantOrganizationId, string permissionCode = "Resource.AccessPermission", bool containChild = false)
        {
            var result       = string.Empty;
            var permissionId = new BaseModuleManager().GetIdByCodeByCache(systemCode, permissionCode);

            if (!string.IsNullOrEmpty(permissionId))
            {
                var parameters = new List <KeyValuePair <string, object> >
                {
                    new KeyValuePair <string, object>(BasePermissionScopeEntity.FieldResourceCategory, BaseUserEntity.CurrentTableName),
                    new KeyValuePair <string, object>(BasePermissionScopeEntity.FieldResourceId, userId),
                    new KeyValuePair <string, object>(BasePermissionScopeEntity.FieldTargetCategory, BaseOrganizationEntity.CurrentTableName),
                    new KeyValuePair <string, object>(BasePermissionScopeEntity.FieldTargetId, grantOrganizationId),
                    new KeyValuePair <string, object>(BasePermissionScopeEntity.FieldPermissionId, permissionId)
                };
                // Nick Deng 优化数据权限设置,没有权限和其他任意一种权限互斥
                // 即当没有权限时,该用户对应该数据权限的其他权限都应删除
                // 当该用户拥有对应该数据权限的其他权限时,删除该用户的没有权限的权限
                result = manager.GetId(parameters);
                if (!string.IsNullOrEmpty(result))
                {
                    manager.SetProperty(new KeyValuePair <string, object>(BasePermissionScopeEntity.FieldId, result), new KeyValuePair <string, object>(BasePermissionScopeEntity.FieldContainChild, containChild ? 1 : 0));
                }
                else
                {
                    var entity = new BasePermissionScopeEntity
                    {
                        PermissionId     = permissionId.ToInt(),
                        ResourceCategory = BaseUserEntity.CurrentTableName,
                        ResourceId       = userId.ToInt(),
                        TargetCategory   = BaseOrganizationEntity.CurrentTableName,
                        TargetId         = grantOrganizationId.ToInt(),
                        ContainChild     = containChild ? 1 : 0,
                        Enabled          = 1,
                        Deleted          = 0
                    };
                    result = manager.Add(entity);
                }
            }
            return(result);
        }